从rails 3控制器中运行外部.rb文件?

时间:2011-01-10 22:58:29

标签: ruby-on-rails ruby command-line ruby-on-rails-3

我的服务器索引目录中有一个rails 3控制器和一个非常简单的ruby(.rb)文件。我想从我的控制器中运行该文件 - 最好的方法是什么?

2 个答案:

答案 0 :(得分:2)

您可以尝试loadhttp://www.ruby-doc.org/core/classes/Kernel.html#M001417

这是一个例子

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

但是,我会说通过运行外部脚本从Rails调用Ruby代码通常是不好的做法。我认为你最好将你的Ruby文件分成两部分:

  1. 将脚本的功能封装在类和/或模块中。
  2. 从命令行调用所述类/模块的那个。
  3. 然后,在你的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类:

答案 1 :(得分:0)

您希望脚本在其自己的进程中运行吗?如果是这样,请检查这些。

  1. 后台工作:http://codeforpeople.rubyforge.org/svn/bj/trunk/README
  2. 或delayed_job:https://github.com/tobi/delayed_job
  3. 此外,您可以像这样使用脚本运行器:

    系统“RAILS_ENV =#{RAILS_ENV} ruby​​#{RAILS_ROOT} / script / runner'MyModel.my_method(some_param)'&”

  4. &最后将把任务放到另一个过程中。