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