3

我正在尝试让一个 Rails 应用程序与新贵一起部署。作为其中的一部分,我使用的是 rbenv ruby​​(ruby 1.9.3p392,如果有关系的话)。

通过一长串的调试,我将事情归结为我认为的最小测试用例。这个脚本:

require 'readline'

当我从命令行运行它时可以工作,但是当我通过暴发户使用如下节启动它时:

script
  env > /tmp/upstart.env
  gem environment > /tmp/gem.env
  /home/topshelf-deploy/.rbenv/shims/ruby bundle_test.rb > /tmp/bt.log 2>&1
end script

我的日志文件包含:

/home/topshelf-deploy/.rbenv/versions/1.9.3-p392/lib/ruby/gems/1.9.1/gems/rb-readline-0.4.2/lib/rbreadline.rb:1091:in `<module:RbReadline>': undefined method `+' for nil:NilClass (NoMethodError)
    from /home/topshelf-deploy/.rbenv/versions/1.9.3-p392/lib/ruby/gems/1.9.1/gems/rb-readline-0.4.2/lib/rbreadline.rb:13:in `<top (required)>'
    from /home/topshelf-deploy/.rbenv/versions/1.9.3-p392/lib/ruby/1.9.1/rubygems/custom_require.rb:36:in `require'
    from /home/topshelf-deploy/.rbenv/versions/1.9.3-p392/lib/ruby/1.9.1/rubygems/custom_require.rb:36:in `require'
    from /home/topshelf-deploy/.rbenv/versions/1.9.3-p392/lib/ruby/gems/1.9.1/gems/rb-readline-0.4.2/lib/readline.rb:8:in `<module:Readline>'
    from /home/topshelf-deploy/.rbenv/versions/1.9.3-p392/lib/ruby/gems/1.9.1/gems/rb-readline-0.4.2/lib/readline.rb:6:in `<top (required)>'
    from /home/topshelf-deploy/.rbenv/versions/1.9.3-p392/lib/ruby/1.9.1/rubygems/custom_require.rb:60:in `require'
    from /home/topshelf-deploy/.rbenv/versions/1.9.3-p392/lib/ruby/1.9.1/rubygems/custom_require.rb:60:in `rescue in require'
    from /home/topshelf-deploy/.rbenv/versions/1.9.3-p392/lib/ruby/1.9.1/rubygems/custom_require.rb:35:in `require'
    from bundle_test.rb:1:in `<main>'

我的 gem 环境似乎是相同的,具体取决于我是通过新贵还是交互式 shell 运行(同样,这工作正常)。我已将 PATH 设置为指向我的 rbenv ruby​​。

关于如何使它工作的任何建议?我的谷歌搜索没有发现任何类似的东西。我很困惑。

4

1 回答 1

3

最后分解并查看 rbreadline.rb:1091 的来源告诉我:

ENV["HOME"] ||= ENV["HOMEDRIVE"]+ENV["HOMEPATH"]

啊。rb-readline 要求我设置 HOME 环境变量。因为,原因:P

添加env HOME=/home/topshelf-deploy到我的新贵配置中,一切都很好。

于 2013-06-04T19:17:04.263 回答