如何在Rails环境中运行Ruby文件?

wei*_*ool 95 ruby ruby-on-rails ruby-on-rails-3

我想在Rails环境的上下文中运行Ruby文件.rails runner几乎可以做我想做的事,但我想给它一个文件名和参数.我很确定这是可能的,因为我以前做过.有人能提醒我怎么做吗?

小智 118

最简单的方法是rails runner因为您不需要修改脚本.

http://guides.rubyonrails.org/command_line.html#rails-runner

在Rails 2中,它是脚本/跑步者.

说啊 rails runner script.rb

  • 如果通过运行“chmod +x script.rb”使脚本可执行,则可以将“#!/usr/bin/env Rails runner”添加到脚本顶部,然后只需使用“./script”运行它。 rb`。 (2认同)

ilt*_*mpo 34

只需要environment.rb在您的脚本中.如果您的脚本位于scriptRails应用程序的目录中

require File.expand_path('../../config/environment', __FILE__)
Run Code Online (Sandbox Code Playgroud)

您可以通过RAILS_ENV在运行脚本时设置环境变量来控制所使用的环境(开发/测试/生产).

RAILS_ENV=production ruby script/test.rb
Run Code Online (Sandbox Code Playgroud)


col*_*sen 23

Runner以非交互方式在Rails的上下文中运行Ruby代码.

来自rails runner命令:

Usage: runner [options] ('Some.ruby(code)' or a filename)

    -e, --environment=name           Specifies the environment for the runner to operate under (test/development/production).
                                     Default: development

    -h, --help                       Show this help message.
Run Code Online (Sandbox Code Playgroud)

你也可以使用runner作为你的脚本的shebang行,如下所示:

-------------------------------------------------------------
#!/usr/bin/env /Users/me/rails_project/script/rails runner

Product.all.each { |p| p.price *= 2 ; p.save! }
-------------------------------------------------------------
Run Code Online (Sandbox Code Playgroud)


Mat*_*att 7

这是一个古老的问题,但我认为创建一个rake任务通常会很有帮助...而且实际上非常简单。

lib/tasks/example.rake

namespace :example do

desc "Sample description you'd see if you ran: 'rake --tasks' in the terminal"
task create_user: :environment do
  User.create! first_name: "Foo", last_name: "Bar"
end
Run Code Online (Sandbox Code Playgroud)

然后在终端运行:

rake example:create_user
Run Code Online (Sandbox Code Playgroud)

在本地,这将在开发数据库的上下文中运行,并且如果在Heroku上运行,它将在连接到生产数据库时运行。我发现这对于协助迁移或修改表特别有用。