Ruby on Rails:如何指定 runner 脚本的环境

12

我正在使用一个shell脚本来运行我的Ruby on Rails应用程序中的一些runner脚本。我需要在生产数据库上运行它,但以下是出现的问题:

#!/bin/bash
/usr/bin/ruby RAILS_ENV=production ../script/runner ../lib/tasks.rb 

出现错误:

/usr/bin/ruby: No such file or directory -- RAILS_ENV=production (LoadError)

我已经尝试在config/environment.rb中强制执行它。

ENV['RAILS_ENV'] ||= 'production'
甚至更多
ENV['RAILS_ENV'] = 'production'

但即使如此,它仍然可以在开发环境中运行。

更新:我可以通过编辑 config/database.yml 文件来强制脚本连接到正确的数据库,但我想知道正确的做法是什么。


你看过我的回复了吗?如果你以不同的方式传递参数,它将正确地选择你的环境。 - Garrett
它可以运行,但不会正确设置环境。 - Goro
那么你的脚本有问题,而不是命令。 - Garrett
5个回答

28

使用 script/runner 命令行工具的帮助文档可以回答你的问题。

script/runner -e production Model.method

遇到了同样的问题。这个解决方案对我有效。谢谢。+1 - Chirantan
1
我没有script/runner,但是在生产环境下,script/rails runner -e production Model.method 对我有效。 - Kris Braun
1
“script/runner -e production Model.method”和“script/rails runner -e production Model.method”对我都不起作用...但是以下命令可以: “RAILS_ENV=production rails runner -e production Model.method” - s2t2

5
如果这是您的命令,那么您的参数顺序就是最大的问题。
/usr/bin/ruby RAILS_ENV=production ../script/runner ../lib/tasks.rb

与不同。

/usr/bin/ruby ../script/runner ../lib/tasks.rb RAILS_ENV=production

第二个例子是在查找文件,而第一个例子则是设置了一个运行时变量,Ruby会将其解释为你要运行的文件。

5
如果您按照以下方式重新编写脚本:
#!/bin/bash
RAILS_ENV=production
/usr/bin/ruby ../script/runner ../lib/tasks.rb

...这将使其在脚本的生命周期内保持不变。要使其在shell会话的生命周期内保持不变,请将其更改为

#!/bin/bash
export RAILS_ENV=production
/usr/bin/ruby ../script/runner ../lib/tasks.rb

1

您可以像这样设置环境变量:

RAILS_ENV=production /usr/bin/ruby ../script/runner ../lib/tasks.rb

0
RAILS_ENV=production script/rails runner 'user = User.find(:first, :conditions => {:admin => true}) ; user.password, user.password_confirmation = "mypasswd"; user.save!'

它对我起作用了


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接