【发布时间】:2013-10-28 14:29:52
【问题描述】:
编辑:
我设法解决了我最初的问题。
如下所述,我在 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 环境?
【问题讨论】:
标签: ruby-on-rails ruby rspec