2009-04-17 46 views
11

我正在使用shell脚本在我的Ruby on Rails应用中运行一些跑步者脚本。我需要对生产数据库运行它,但以下几点: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

你读过我的反应?如果您以不同方式传递参数,它会正确选择您的环境。 – Garrett 2009-04-18 02:43:47

+0

它会运行,但它不会正确设置环境。 – Goro 2009-04-18 23:26:18

回答

25

为脚本的命令行上的帮助/亚军让你你的答案。

script/runner -e production Model.method 
5

如果这是你的命令,你的论点的顺序是你最大的问题。

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

不同于。

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

第二个例子是要找的文件,第一个是设置一个运行时变量,而红宝石将其解释为要运行该文件。

5

如果你重做你这样的脚本:

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

...这将使它坚持对剧本的寿命。为了使粘在外壳的会话​​的生存期,将其更改为

#!/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!' 

它为我工作