【问题标题】:Rubygems. LoadError in Rails红宝石。 Rails 中的加载错误
【发布时间】:2011-04-08 20:41:14
【问题描述】:

每次我启动我的 Rails 应用程序时,都会收到 LoadError 并显示以下输出。

在 Rails 2.3.8 上:

没有要加载的文件 -- sqlite3/sqlite3_native :29:in `require'

在 Rails 3.0.0 上:

没有要加载的文件——捆绑器 :29:in `require'

我在使用 Nginx + Passenger 的开发机器上以生产模式运行应用程序。

这个问题的原因是什么?我该如何解决?

谢谢。

Debian GNU/Linux 5.0.6;

红宝石 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;

捆绑器 1.0.0.rc.6.

更新


我所有的 gem 都是由本地目录 /home/<usernam>/.gem 中的非特权用户安装的。如果有帮助,这里是gem env 输出:

RubyGems 环境: - 红宝石版本:1.3.7 - 红宝石版本:1.9.2(2010-08-18 补丁级别 0)[i686-linux] - 安装目录:/home//.gem - 红宝石可执行文件:/usr/local/bin/ruby - 可执行目录:/home//.gem/bin - 红宝石平台: - 红宝石 - x86-linux - 宝石路径: - /home//.gem - 宝石配置: - :update_sources => 真 - :详细 => 真 - :基准 => 假 - :回溯 => 假 - :bulk_threshold => 1000 - “宝石” => “--no-ri --no-rdoc” - :gemhome => "/home//.gem" - :gempath => ["/home//.gem"] - 远程资源: - http://rubygems.org/

更新


我解决了这个问题。它的来源是我定义了一个自定义 gem 路径。那就是我在~/.gemrc 文件中添加了以下几行:

:gemhome: /home//.gem :宝石路径: - /home//.gem

因此,我所有的 gem 都放在指定的目录中,但不是默认目录。出于某种原因,Rubygems 在那里找不到它并引发了异常。

当我从文件中删除这些行时,为 Rubygems 设置了默认路径,在我安装了所有必需的 gem 并加载了我的 Rails 应用程序后,所有这些都开始工作了。

再次,错误条件是:

  1. Nginx + 乘客;
  2. gempath 在~/.gemrc 中设置为/home/<unprivileged_user>/.gem
  3. init.d 脚​​本已创建并添加到引导序列 (update-rc.d nginx defaults);
  4. 系统重启,服务器自动启动;
  5. http://localhost/my_rails_app;
  6. 加载错误;没有要加载的文件 -- ; :29:in `require'。

为什么 Rubygems 不能在自定义位置找到 gem,但在默认位置可以找到它们?这就是问题所在。

【问题讨论】:

    标签: ruby-on-rails ruby rubygems


    【解决方案1】:

    我在使用 RVM 时也遇到了这个问题 - 我必须指定一个 gemset 或其他东西,而不是使其特定于项目。无论如何,如果您想了解 RVM 的基础知识并尝试为当前文件夹/项目指定一个新的 gemset,请阅读此rvm guide,为该 gemset 安装一个新的 rails gem,然后使用该 gemset。例如,要为 rails 2.3.8 版创建一个新的 gemset:


    $ rvm gemset 创建 rails238


    $ rvm ruby​​-1.8.7@rails238


    $ gem install rails -v 2.3.8


    然后,如果一切按计划进行,则使用 [gemsetName] 类型 rvm gemset,或执行 rvm gemset list 以查看已安装 gemset 的列表,并查看 rails 是否正常运行,尝试 rails -v,您应该会看到 rails 2.3。 8

    【讨论】:

    • OP 没有表明他们正在使用 RVM。并非总是可以在生产服务器上使用 RVM。
    【解决方案2】:

    检查您的系统以找到您的红宝石和宝石的安装位置(您可以通过“哪个红宝石”和“哪个宝石”来做到这一点)。通常,它们安装在同一个文件夹(/usr/bin 或 /usr/local)中。如果它们位于不同的位置,则可能会出现加载错误。只是一个建议。

    【讨论】:

    • sudo 和安装无关,这里也没有任何暗示他使用的是使用sudo 的系统(即Ubuntu,因为大多数人使用su)。
    • 它们在同一个文件夹中 (/usr/local/bin)。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2011-04-15
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多