Запуск внешнего файла .rb из контроллера rails 3? - PullRequest
0 голосов
/ 11 января 2011

У меня есть контроллер rails 3 и очень простой файл ruby ​​(.rb) в директории сервера Я хотел бы запустить файл из моего контроллера - каков наилучший способ сделать это?

Ответы [ 2 ]

2 голосов
/ 11 января 2011

Вы можете попробовать load: http://www.ruby -doc.org / core / classes / Kernel.html # M001417

Вот один пример

# in your controller
def create
  load('/path/to/your/file.rb')
end

Тем не менее, я бы сказал, что в целом плохая практика вызывать код Ruby из Rails, запуская внешний скрипт. Я думаю, вам лучше разбить ваш файл Ruby на две части:

  1. Тот, который инкапсулирует функциональность скрипта в классах и / или модулях.
  2. Тот, который вызывает указанные классы / модули из командной строки.

Затем в приложении Rails просто require # 1 и используйте классы / модули.

Например, предположим, что ваш скрипт в данный момент называется simple.rb и выглядит так:

# simple.rb
puts 'Hello, world!'

Затем вы должны создать hello_world.rb и сделать это:

# hello_world.rb
class HelloWorld
  def say_it
    puts 'Hello, world!'
  end
end

Вы бы заменили содержимое simple.rb на это:

require 'hello_world.rb'
HelloWorld.new.say_it

Тогда в вашем контроллере вы можете обойти simple.rb и просто использовать класс HelloWorld напрямую:

0 голосов
/ 11 января 2011

Вы хотите, чтобы скрипт выполнялся в своем собственном процессе?Если это так, проверьте их.

  1. Фоновые задания: http://codeforpeople.rubyforge.org/svn/bj/trunk/README
  2. Или delayed_job: https://github.com/tobi/delayed_job
  3. Также вы можете использовать скрипт запусканапример:

    system "RAILS_ENV = # {RAILS_ENV} ruby ​​# {RAILS_ROOT} / script / runner 'MyModel.my_method (some_param)' &"

в конце поставит задачу в другой процесс.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...