3

编辑

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

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

问题原来是环境变量BUNDLE_GEMFILE被设置为指向rspec项目,即一组不包含 Rails 的 gem。像这样设置它:

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 示例中,并且宾果游戏!...一切正常。

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

4

2 回答 2

1

尝试

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

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

于 2013-10-28T16:33:23.080 回答
1

尝试

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

看看它是否与价值有关CWD

于 2013-10-30T13:25:44.330 回答