我正在使用shell脚本在Ruby on Rails应用程序中运行一些运行程序脚本。我需要在生产数据库上运行它,但以下内容:
#!/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文件强制脚本连接到正确的数据库,但我想知道这样做的正确方法是什么。
答案 0 :(得分:25)
脚本/跑步者命令行的帮助可以为您提供答案。
script/runner -e production Model.method
答案 1 :(得分:5)
如果这是你的命令,你的论点顺序是你最大的问题。
/usr/bin/ruby RAILS_ENV=production ../script/runner ../lib/tasks.rb
与...不同。
/usr/bin/ruby ../script/runner ../lib/tasks.rb RAILS_ENV=production
第二个例子是查找文件,第一个是设置运行时变量,而ruby将其解释为你想要运行的文件。
答案 2 :(得分: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
答案 3 :(得分:1)
您可以像这样设置环境变量:
RAILS_ENV=production /usr/bin/ruby ../script/runner ../lib/tasks.rb
答案 4 :(得分:0)
RAILS_ENV=production script/rails runner 'user = User.find(:first, :conditions => {:admin => true}) ; user.password, user.password_confirmation = "mypasswd"; user.save!'
它对我有用