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


106

我想在Rails环境中运行Ruby文件。RailsRunner几乎可以完成我想做的事情,但是我只想给它提供文件名和参数。我很确定这是可能的,因为我之前已经做过。有人可以提醒我该怎么做吗?

Answers:



36

只需environment.rb在脚本中要求即可。如果您的脚本位于scriptRails应用程序的目录中,请执行

require File.expand_path('../../config/environment', __FILE__)

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

RAILS_ENV=production ruby script/test.rb

如果我运行以上代码,它将显示“ home / apps / config / environment”。如果我有2个Rails应用程序在同一目录上运行该怎么办。需要哪种环境?我在本地邮箱中遇到了这个问题。友善建议
Vijay Sali 2014年

@VijaySali我假设您正在从app/script目录运行脚本。环境文件将从单个应用程序中获取。
iltempo,2014年

是的,感谢它为我工作,我还添加了ENV ['RAILS_ENV']
Vijay Sali 2014年

26

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.

您还可以将runner用作脚本的shebang行,如下所示:

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

Product.all.each { |p| p.price *= 2 ; p.save! }
-------------------------------------------------------------

1
为什么仅当我完全指定“ / Users / me / rails_project / script / rails”而不是“ rails”时才起作用?TIA
iphone007'2

您的其他rails命令是否还需要列出完整路径?(即Rails服务器)
科尔森

@ iphone007可能取决于您从何处运行脚本。
David Moles

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

然后在终端运行:

rake example:create_user

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

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.