Ruby-on-rails 运行 heroku create --stack cedar 时无法加载此类文件 -- readline (LoadError)
声明:本页面是StackOverFlow热门问题的中英对照翻译,遵循CC BY-SA 4.0协议,如果您需要使用它,必须同样遵循CC BY-SA许可,注明原文地址和作者信息,同时你必须将它归于原作者(不是我):StackOverFlow
原文地址: http://stackoverflow.com/questions/9340497/
Warning: these are provided under cc-by-sa 4.0 license. You are free to use/share it, But you must attribute it to the original authors (not me):
StackOverFlow
cannot load such file -- readline (LoadError) when running heroku create --stack cedar
提问by Only Bolivian Here
I'm trying to deploy my Rails application to Heroku to test it out by following these instructions:
我正在尝试按照以下说明将我的 Rails 应用程序部署到 Heroku 以对其进行测试:
http://devcenter.heroku.com/articles/rails3#prerequisites
http://devcenter.heroku.com/articles/rails3#prerequisites
Here is the command I'm trying to run:
这是我试图运行的命令:
heroku create --stack cedar
And I get this error message:
我收到此错误消息:
/home/sergio/.rvm/rubies/ruby-1.9.3-p125/lib/ruby/site_ruby/1.9.1/rubygems/custom_require.rb:36:in `require': cannot load such file -- readline (LoadError)
from /home/sergio/.rvm/rubies/ruby-1.9.3-p125/lib/ruby/site_ruby/1.9.1/rubygems/custom_require.rb:36:in `require'
from /home/sergio/.rvm/gems/ruby-1.9.3-p125/gems/heroku-2.20.1/lib/heroku/command/run.rb:1:in `<top (required)>'
from /home/sergio/.rvm/rubies/ruby-1.9.3-p125/lib/ruby/site_ruby/1.9.1/rubygems/custom_require.rb:36:in `require'
from /home/sergio/.rvm/rubies/ruby-1.9.3-p125/lib/ruby/site_ruby/1.9.1/rubygems/custom_require.rb:36:in `require'
from /home/sergio/.rvm/gems/ruby-1.9.3-p125/gems/heroku-2.20.1/lib/heroku/command.rb:14:in `block in load'
from /home/sergio/.rvm/gems/ruby-1.9.3-p125/gems/heroku-2.20.1/lib/heroku/command.rb:13:in `each'
from /home/sergio/.rvm/gems/ruby-1.9.3-p125/gems/heroku-2.20.1/lib/heroku/command.rb:13:in `load'
from /home/sergio/.rvm/gems/ruby-1.9.3-p125/gems/heroku-2.20.1/lib/heroku/cli.rb:8:in `start'
from /home/sergio/.rvm/gems/ruby-1.9.3-p125/gems/heroku-2.20.1/bin/heroku:15:in `<top (required)>'
from /home/sergio/.rvm/gems/ruby-1.9.3-p125/bin/heroku:19:in `load'
from /home/sergio/.rvm/gems/ruby-1.9.3-p125/bin/heroku:19:in `<main>'
And this is the content of the file in question:
这是有问题的文件的内容:
#--
# Copyright 2006 by Chad Fowler, Rich Kilmer, Jim Weirich and others.
# All rights reserved.
# See LICENSE.txt for permissions.
#++
module Kernel
if defined?(gem_original_require) then
# Ruby ships with a custom_require, override its require
remove_method :require
else
##
# The Kernel#require from before RubyGems was loaded.
alias gem_original_require require
private :gem_original_require
end
##
# When RubyGems is required, Kernel#require is replaced with our own which
# is capable of loading gems on demand.
#
# When you call <tt>require 'x'</tt>, this is what happens:
# * If the file can be loaded from the existing Ruby loadpath, it
# is.
# * Otherwise, installed gems are searched for a file that matches.
# If it's found in gem 'y', that gem is activated (added to the
# loadpath).
#
# The normal <tt>require</tt> functionality of returning false if
# that file has already been loaded is preserved.
def require path
if Gem.unresolved_deps.empty? then
gem_original_require path
else
spec = Gem::Specification.find { |s|
s.activated? and s.contains_requirable_file? path
}
unless spec then
found_specs = Gem::Specification.find_in_unresolved path
unless found_specs.empty? then
found_specs = [found_specs.last]
else
found_specs = Gem::Specification.find_in_unresolved_tree path
end
found_specs.each do |found_spec|
found_spec.activate
end
end
return gem_original_require path
end
rescue LoadError => load_error
if load_error.message.end_with?(path) and Gem.try_activate(path) then
return gem_original_require(path)
end
raise load_error
end
private :require
end
I can run my application locally using rails -s, but I just can't seem to publish it to Heroku.
我可以使用 本地运行我的应用程序rails -s,但我似乎无法将它发布到 Heroku。
回答by davidkovsky
iltempo and buru's answers helped me:
iltempo 和 buru 的回答帮助了我:
sudo apt-get install libreadline-dev
rvm remove 1.9.3
rvm install 1.9.3
Then add to your Gemfile:
gem 'rb-readline'
回答by Itay Maman
Worked for me:
对我来说有效:
gem install rb-readline
回答by buru
Such an error usually occurs when your rvm ruby was compiled without readline extension (which happens when there weren't readline headers installed before ruby compilation). So, try the following: install libreadline-dev, then reinstall ruby:
当你的 rvm ruby 在没有 readline 扩展的情况下编译时,通常会发生这样的错误(在 ruby 编译之前没有安装 readline 头文件时会发生这种情况)。因此,请尝试以下操作:安装 libreadline-dev,然后重新安装 ruby:
rvm remove 1.9.3
rvm install 1.9.3
回答by Igor Escobar
Made it work for me!
让它对我来说有效!
gem 'rb-readline', "~> 0.5.0.pre.1", :require => false
回答by d4rky
This link comes as the first in Google search so I'm going to clear up some confusion caused by the top answer.
此链接是 Google 搜索中的第一个链接,因此我将澄清由最佳答案引起的一些混乱。
The top answer is actually two answers merged into one. Both of them would fix your problem on their own, both have their strengths and weaknesses.
最佳答案实际上是将两个答案合并为一个。他们都会自己解决你的问题,都有自己的长处和短处。
The first one is to install libreadline-devand recompile your Ruby. This causes Ruby to be compiled with C readline support. It's potentially faster but adds another C dependency to your Ruby and has it's own set of disadvantages (for example you cannot be sure your linux distribution ships with GNU readline that has more features but is on LGPL license). It also doesn't work on certain platforms (Windows).
第一个是安装libreadline-dev并重新编译您的 Ruby。这会导致使用 C readline 支持编译 Ruby。它可能更快,但会为您的 Ruby 添加另一个 C 依赖项,并且有其自身的一系列缺点(例如,您无法确定您的 linux 发行版附带具有更多功能但采用 LGPL 许可的 GNU readline)。它也不适用于某些平台(Windows)。
The second one is to install rb-readline, either by putting it in your Gemfile or by installing it globally (not recommended as you may switch to different Ruby version and have the same problem yet again). This is better for some because you now have pure-Ruby implementation that works on every platform but requires you to specify it in Gemfile (which shouldn't be much of a problem) and is potentially slower. To be honest I couldn't find any more problems with it.
第二个是安装rb-readline,通过将其放入 Gemfile 或通过全局安装(不推荐,因为您可能会切换到不同的 Ruby 版本并再次遇到相同的问题)。这对某些人来说更好,因为您现在拥有适用于每个平台的纯 Ruby 实现,但需要您在 Gemfile 中指定它(这应该不是什么大问题)并且可能会更慢。老实说,我找不到更多的问题了。
The final choice is of course yours but if you're running multiple projects or multiple Ruby versions on the same machine, I'd go with installing libreadline-devor whatever your distribution requires, mostly because you only have to do it once and then all newly compiled Rubies will work out of the box. But if you're trying to run just this one project, use "weird" platform (Windows), rb-readline is probably way to go.
最后的选择当然是你的,但如果你在同一台机器上运行多个项目或多个 Ruby 版本,我会安装libreadline-dev或安装你的发行版需要的任何东西,主要是因为你只需要做一次,然后所有新编译红宝石开箱即用。但是,如果您只想运行这个项目,请使用“奇怪的”平台(Windows),rb-readline 可能是可行的方法。
回答by Lasse Skindstad Ebert
The easiest way to install dependencies for ruby is to run:
为 ruby 安装依赖项的最简单方法是运行:
rvm remove 1.9.3
And then
进而
rvm install 1.9.3
Before the last command actually installs ruby, it will ask you to install dependencies. In my case I got this tip:
在最后一个命令实际安装 ruby 之前,它会要求您安装依赖项。就我而言,我得到了这个提示:
sudo apt-get install build-essential openssl libreadline6 libreadline6-dev curl git-core zlib1g zlib1g-dev libssl-dev libyaml-dev libsqlite3-dev sqlite3 libxml2-dev libxslt-dev autoconf libc6-dev ncurses-dev automake libtool bison subversion pkg-config
This should be run in another terminal before continuing the install.
在继续安装之前,这应该在另一个终端中运行。
回答by iltempo
Sounds like readline gem is requires by your application but not specified in your Gemfile. Please try to add it.
听起来您的应用程序需要 readline gem,但未在您的 Gemfile 中指定。请尝试添加它。
回答by s01ipsist
If you happen to be using rbenv on Ubuntu
如果你碰巧在 Ubuntu 上使用 rbenv
sudo apt-get install libreadline-dev
CONFIGURE_OPTS="--with-readline-dir=/usr/include/readline" rbenv install 1.9.3-p125
as written up at http://vvv.tobiassjosten.net/ruby/readline-in-ruby-with-rbenv/
如http://vvv.tobiassjosten.net/ruby/readline-in-ruby-with-rbenv/所写

