使用RVM时Heroku gem无法工作

15

我正在遵循《Ruby on Rails教程》(http://railstutorial.org/chapters/beginning#sec:1.4.1)进行学习,一切都进行得很顺利,直到我尝试在Heroku上启动应用程序。

我安装了Heroku,安装过程很顺利,但是现在当我运行heroku keys:add或任何其他Heroku命令时,我会收到以下错误:

/home/sirswap/.rvm/gems/ruby-1.9.2-p0@rails3tutorial/gems/rest-client-1.4.2/lib/restclient.rb:9:in `rescue in <top (required)>': 
no such file to load -- net/https. Try running apt-get install libopenssl-ruby (LoadError)
        from /home/sirswap/.rvm/gems/ruby-1.9.2-p0@rails3tutorial/gems/rest-client-1.4.2/lib/restclient.rb:5:in `<top (required)>'
        from <internal:lib/rubygems/custom_require>:29:in `require'
        from <internal:lib/rubygems/custom_require>:29:in `require'
        from /home/sirswap/.rvm/gems/ruby-1.9.2-p0@rails3tutorial/gems/rest-client-1.4.2/lib/rest_client.rb:2:in `<top (required)>'
        from <internal:lib/rubygems/custom_require>:29:in `require'
        from <internal:lib/rubygems/custom_require>:29:in `require'
        from /home/sirswap/.rvm/gems/ruby-1.9.2-p0@rails3tutorial/gems/heroku-1.9.14/lib/heroku/client.rb:2:in `<top (required)>'
        from <internal:lib/rubygems/custom_require>:29:in `require'
        from <internal:lib/rubygems/custom_require>:29:in `require'
        from /home/sirswap/.rvm/gems/ruby-1.9.2-p0@rails3tutorial/gems/heroku-1.9.14/lib/heroku.rb:3:in `<top (required)>'
        from <internal:lib/rubygems/custom_require>:29:in `require'
        from <internal:lib/rubygems/custom_require>:29:in `require'
        from /home/sirswap/.rvm/gems/ruby-1.9.2-p0@rails3tutorial/gems/heroku-1.9.14/bin/heroku:6:in `<top (required)>'
        from /home/sirswap/.rvm/gems/ruby-1.9.2-p0@rails3tutorial/bin/heroku:19:in `load'
        from /home/sirswap/.rvm/gems/ruby-1.9.2-p0@rails3tutorial/bin/heroku:19:in `<main>'

我按照错误消息所说安装了libopenssl-ruby,但heroku仍然无法正常工作。我进行了搜索,并找到以下两个页面尝试解决heroku错误: http://www.mail-archive.com/heroku@googlegroups.com/msg05001.html http://blog.project-sierra.de/archives/1534

我遵循这些页面上的指示(它们相同),但heroku仍然无法正常工作。

通常我在Windows上进行工作,因此在Ubuntu上一切都有点陌生。这是我的Ruby环境:

 RubyGems Environment:
  - RUBYGEMS VERSION: 1.3.7
  - RUBY VERSION: 1.9.2 (2010-08-18 patchlevel 0) [i686-linux]
  - INSTALLATION DIRECTORY: /home/sirswap/.rvm/gems/ruby-1.9.2-p0@rails3tutorial
  - RUBY EXECUTABLE: /home/sirswap/.rvm/rubies/ruby-1.9.2-p0/bin/ruby
  - EXECUTABLE DIRECTORY: /home/sirswap/.rvm/gems/ruby-1.9.2-p0@rails3tutorial/bin
  - RUBYGEMS PLATFORMS:
    - ruby
    - x86-linux
  - GEM PATHS:
     - /home/sirswap/.rvm/gems/ruby-1.9.2-p0@rails3tutorial
     - /home/sirswap/.rvm/gems/ruby-1.9.2-p0@global
  - GEM CONFIGURATION:
     - :update_sources => true
     - :verbose => true
     - :benchmark => false
     - :backtrace => false
     - :bulk_threshold => 1000
  - REMOTE SOURCES:
     - http://rubygems.org/

我正在运行Ubuntu 10.04。

非常感谢任何帮助或建议下一步该怎么做 :)


谢谢大家的评论,我现在非常忙于工作面试和旅行,所以稍后会回复你们的答案,看看哪种方案适合我 :) - Louis Sayers
7个回答

20

我也遇到了同样的问题,我认为这是由于在运行以下命令时没有安装列出的所有Ruby依赖项导致的:

$rvm requirements # it was earlier: rvm notes

具体来说,我执行了以下命令(请确保先安装aptitude):

$sudo aptitude install build-essential bison openssl libreadline5 libreadline5-dev curl git zlib1g zlib1g-dev libssl-dev libsqlite3-0 libsqlite3-dev sqlite3 libxml2-dev

经过所有这些步骤后,我重新编译了我的 Ruby 安装(使用 $rvm reinstall 1.9.2),然后 Heroku 就像魔法般地运转起来了。


1
“rvm notes” 在 *nix 和 Mac OS 上非常重要,因为通常会缺少依赖项,这将导致 Ruby 的某些部分无法正常工作,但直到很久以后才会显现出来。然后我们就会遇到问题,而且不会将其与安装过程相关联。那时我们就会在墙上撞头一段时间。 - the Tin Man
这对我也起作用了。跟随Rails教程,Heroku命令出现问题,但安装缺失的依赖项并重新编译1.9.2就像魔法一样奏效了。 - Nicholas Cloud
安装 Aptitudesudo apt-get install aptitude - Jason Kim

4

昨天我花费了许多时间在这上面。最终,在某种程度上是偶然的(实际上更像是绝望),我查看了文件/usr/bin/heroku

我注意到脚本的第一行说:

 #!/usr/bin/env ruby1.9.1

我把这个改成了

#!/usr/bin/env ruby

重新安装了约10次Ruby并进行了所有与openssl有关的操作之后,它开始工作了。摇头


我曾经通过rvm使其运行,但不喜欢它所引起的大量环境变化(导致其他调用shell代码中出现奇怪的rvm相关错误)。移除rvm会破坏一些东西,而大量尝试ruby / ruby-full / libssl也没有帮助。但这确实有用!谢谢。 - gojomo
很高兴能帮助到你,Gojomo。我也联系了Heroku团队,并与他们合作尝试理解这个问题:https://github.com/heroku/heroku/issues/174 - Tom Carchrae
1
顺便说一下,我认为问题在于Heroku脚本强制使用Ruby 1.9.1。当我安装openssh等软件时,Ubuntu会将其应用于1.9.2 - 因此1.9.1错误仍然存在。这是我(非Ruby专家)对问题的理解。 - Tom Carchrae

4

嘿 :) 不知道这是否仍然相关或者这对你也起作用..不过它对我有用。

我也遇到了完全相同的问题。

当我运行
$ rails console
时,我注意到出现了错误,表明我遇到了 Readline 的问题。

通过访问http://rvm.beginrescueend.com/packages/readline/,帮助我解决了我遇到的所有问题。


3

我也在Ubuntu 10.10上进行Railstutorial,当尝试添加Heroku密钥时遇到了完全相同的错误。以下是解决方法:

$ rvm remove 1.9.2
$ rvm pkg install openssl   
$ rvm install 1.9.2 -C --with-openssl-dir=$HOME/.rvm/usr

2

阅读我在如何在Linux上安装RVM的指导。您需要安装libssl-dev,否则net/https等内容将无法工作。不过没关系,只需安装它并重新编译您的rubies即可。


谢谢,我刚遇到这个问题,安装libssl-dev并运行extconf.rb解决了它。 - Lobe
1
-1 代表商业的 about.com 垃圾广告,而不是真正的文档。 - wuputah

1
在您的情况下,“重新编译您的 rubies” 可能通过输入以下命令来完成:
rvm install  

或者,您可以通过手动重新编译openssl扩展来取得一些进展:
cd /home/sirswap/.rvm/src/ruby-1.9.2-p0/ext/openssl
ruby extconf.rb  
make  
make install  

0
请重新安装 Ruby。我也遇到了同样的问题,通过重新安装 Ruby 解决了。
rvm reinstall ruby 1.9.2

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接