修改:
我设法解决了原来的问题。
如下所述,我在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环境?
答案 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