rspec中Rails Runner的环境问题

时间:2013-10-28 14:29:53

标签: ruby-on-rails ruby rspec

修改

我设法解决了原来的问题。

如下所述,我在rspec中运行rails runner时遇到问题。我现在意识到的一个细节可能是相关的,我的rspec测试是在一个完全不同的项目中,不包括Rails。

问题是环境变量BUNDLE_GEMFILE被设置为指向rspec项目,即一组不包含Rails的宝石。设置如下:

ENV['BUNDLE_GEMFILE'] = nil

在调用我的system命令之前,所有事情都会复活。

原始问题:

以下命令在我的终端上运行:

ruby <path to rails app>/script/rails runner <cmd>

然而,尝试从ruby脚本(rspec)中运行相同的命令却没有,它失败了:

<path>/script/rails:6:in `require': cannot load such file -- rails/commands (LoadError)

这是命令:

system("ruby <path to rails app>/script/rails runner <cmd>")

我认为这是终端(bash)和ruby中的系统命令之间不同环境的问题。有没有办法让ruby脚本使用相同的环境?

修改

我尝试按照@ Eternal-Learner的答案设置环境,但这对错误没有任何影响。可能这表明问题不是环境问题,而是问题不是环境问题?

编辑2:

看起来这是rspec的一个问题。我尝试在普通的ruby脚本中运行命令,而不是在rspec示例中运行命令,并且bingo!...一切正常。

那么我为什么要在rspec中运行呢?我希望运行system命令会启动Ruby解释器的新实例,因此在rspec环境之外。在Ruby解释器的不同实例之间是否存在某种Ruby全局,或者系统没有创建新的Ruby环境?

2 个答案:

答案 0 :(得分:1)

尝试

 system("/usr/bin/env ruby <path to rails app>/script/rails runner <cmd>")

您可能需要检查系统上env的正确路径(可能是/bin/env)并相应地更改路径。

答案 1 :(得分:1)

尝试

system("cd <path to rails app> && ruby script/rails runner <cmd>")  

查看它是否与CWD

的值有关