每当我启动Rails应用程序时,我都会得到 LoadError ,并带有以下输出。
On Rails 2.3.8:
no such file to load -- sqlite3/sqlite3_native <internal:lib/rubygems/custom_require>:29:in `require'
On Rails 3.0.0:
no such file to load -- bundler <internal:lib/rubygems/custom_require>:29:in `require'
我使用Nginx + Passenger在开发机器上以生产模式运行应用程序。
这个问题的原因是什么?我该如何解决?
感谢。
Debian GNU / Linux 5.0.6;
Ruby 1.9.2;
Rubygems 1.3.7;
Ruby on Rails 2.3.8,3.0.0;
Nginx 0.8.50;
乘客2.2.15;
sqlite3-ruby 1.3.1;
bundler 1.0.0.rc.6。
更新
我的所有宝石都由非特权用户安装在本地目录/home/<usernam>/.gem
中。如果有帮助,这是gem env
输出:
RubyGems Environment: - RUBYGEMS VERSION: 1.3.7 - RUBY VERSION: 1.9.2 (2010-08-18 patchlevel 0) [i686-linux] - INSTALLATION DIRECTORY: /home/<username>/.gem - RUBY EXECUTABLE: /usr/local/bin/ruby - EXECUTABLE DIRECTORY: /home/<username>/.gem/bin - RUBYGEMS PLATFORMS: - ruby - x86-linux - GEM PATHS: - /home/<username>/.gem - GEM CONFIGURATION: - :update_sources => true - :verbose => true - :benchmark => false - :backtrace => false - :bulk_threshold => 1000 - "gem" => "--no-ri --no-rdoc" - :gemhome => "/home/<username>/.gem" - :gempath => ["/home/<username>/.gem"] - REMOTE SOURCES: - http://rubygems.org/
更新
我解决了这个问题。它的来源是我定义了一个自定义宝石路径。那就是我在~/.gemrc
文件中添加了以下几行:
:gemhome: /home/<username>/.gem :gempaths: - /home/<username>/.gem
因此,我的所有宝石都放在指定的目录中,但不是默认目录。由于某种原因,Rubygems不会在那里找到并且出现异常。
当我从文件中删除这些行时,为Rubygems设置了默认路径,在我安装了所有必需的gem并加载了我的Rails应用程序后,所有这些都开始工作。
再一次,错误条件是:
/home/<unprivileged_user>/.gem
; ~/.gemrc
init.d
脚本被加载并添加到引导序列(update-rc.d nginx defaults
); 为什么Rubygems不能在自定义位置找到宝石,但可以在默认位置找到它们?这就是问题。
答案 0 :(得分:2)
使用RVM时我也遇到了这个问题 - 我必须指定一个gemset或者其他东西而不是特定于项目。无论如何,如果您想了解RVM的基础知识并尝试为当前文件夹/项目指定新的gemset,请为此gemset安装新的rails gem,然后使用该gemset,请阅读此rvm guide。例如,要为rails版本2.3.8创建新的gemset:
$ rvm gemset create rails238
$ rvm ruby-1.8.7@rails238
$ gem install rails -v 2.3.8
然后如果所有按照计划类型rvm gemset使用[gemsetName],或者执行rvm gemset list以查看已安装的gemsets列表,并查看rails是否正常工作试试rails -v并且你应该看到rails 2.3。 8
答案 1 :(得分:0)
检查你的系统以找到你的红宝石和宝石的安装位置(你可以通过“which ruby”和“which gem”来实现)。通常,它们安装在同一文件夹(/ usr / bin或/ usr / local)中。如果它们位于不同的位置,则可能存在加载错误。只是一个建议。