2012-03-18 89 views
76

我想在Rails环境的上下文中运行一个Ruby文件。 rails runner几乎做我想做的事情,但我想给它的文件名和参数。我很肯定这是可能的,因为我以前做过。有人可以提醒我如何做到这一点?如何在Rails环境中运行Ruby文件?

回答

28

在脚本中只需要environment.rb。如果你的脚本位于script目录你的Rails应用的各种做

​​

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

RAILS_ENV=production ruby script/test.rb 
+0

如果我运行上面的代码,它会给“家庭/应用程序/配置/环境”。如果我在同一个目录上运行2个rails应用程序,该怎么办?需要哪个环境?我在本地盒子中遇到了这个问题。好心建议 – 2014-05-05 07:26:30

+0

@VijaySali我假设你正在从'app/script'目录运行你的脚本。环境文件将从个人应用程序中获取。 – iltempo 2014-05-05 13:11:31

+0

是感谢它为我工作,我也添加了ENV ['RAILS_ENV']以及 – 2014-05-06 11:46:12

18

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. 

您还可以使用热流道的家当行脚本是这样的:

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

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

为什么只有当我全部指定“/ Users/me/rails_project/script/rails”而不仅仅是“rails”时才起作用? TIA – iphone007 2015-02-04 18:23:41

+0

您的其他rails命令是否也需要列出完整路径? (即导轨服务器) – colsen 2015-02-25 18:47:14

3

这是一个老问题,但在我看来,我经常发现它有助于创建一个耙子任务...而且它实际上非常简单。

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上运行它会运行同时连接到您的生产数据库。我发现这对协助迁移或修改表格特别有用。

相关问题