2011-01-10 1 views

ответ

2

Вы можете попробовать 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 

Затем в вашем контроле r, вы можете обходить simple.rb и просто использовать класс HelloWorld:

0

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

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

    система "RAILS_ENV = # {RAILS_ENV} рубин # {RAILS_ROOT}/скрипт/питателя 'MyModel.my_method (some_param)' & "

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

Смежные вопросы