【问题标题】:Environment issues with Rails Runner in rspecrspec 中 Rails Runner 的环境问题
【发布时间】: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


    【解决方案1】:

    试试

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

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

    【讨论】:

    • 抱歉之前的评论,事实证明这不起作用。可能这表明不是环境导致“找不到文件”问题。
    【解决方案2】:

    试试

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

    看是否和CWD的值有关

    【讨论】:

    • 我实际上已经尝试过类似的命令。请查看我更新的问题,看起来问题与 rspec 有关。
    • 您调用的 ruby​​ 与运行 rspec 的版本相同吗?
    • 我不确定你的意思。我可能为两者运行相同的版本(1.9.3),但我认为我运行的不是同一个实例,即我认为运行 Ruby 的两个 shell 会有不同的环境。不是这样吗?
    • 我的意思是同一个二进制文件。相同的版本..我尝试在两种方式下运行一个简单的 ruby​​ 脚本,例如 ENV.each {|k,v| puts "#{k}: #{v}"} 并比较输出。我猜你正在生成的 shell 中设置了一些东西,导致了它。
    • 好的,我已经完成了...我可以看到两个环境之间的一些差异,我在寻找什么?
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-06-28
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多