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

时间:2009-04-17 04:05:52

标签: ruby-on-rails linux bash

我正在使用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文件强制脚本连接到正确的数据库,但我想知道这样做的正确方法是什么。

5 个答案:

答案 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!'

它对我有用