【问题标题】:Mysql2 needed for production environment, not development environment生产环境需要mysql2,开发环境不需要
【发布时间】:2011-12-06 09:39:02
【问题描述】:

对于我的 rails 应用程序(rails 3.1)的开发和测试环境,我使用 mysqlite3,它工作正常。对于共享服务器上的生产环境,我使用 mysql。使用 capistrano 一切都可以正常部署,但随后,Passenger 给出了以下错误:“请安装 mysql2 适配器:gem install activerecord-mysql2-adapter(mysql2 不是捆绑包的一部分。将其添加到 Gemfile。)”

所以我将它添加到 gemfile 中:

group :production do
  gem 'activerecord-mysql2-adapter'
end

但是当我执行“捆绑安装”时,它说找不到那个 gem。当我尝试先添加 mysql2 gem 时,它会尝试将其安装在我的本地 Mac 上(顺便说一句,这很痛苦),而我认为它只会安装在共享服务器上?

【问题讨论】:

  • mysqlite3,你的意思是sqlite3吗?

标签: ruby-on-rails


【解决方案1】:

Bundler 无法找到 gem activerecord-mysql2-adapter,因为没有这样的 gem。

如果您使用的mysql2 版本太新(我相信是~> 0.3.x),您会遇到此错误。那是因为这些版本应该与 Rails 3.1 及更高版本一起使用。

您可以通过将应用程序升级到 Rails 3.1 或告诉 Gemfile 您想要特定版本的 mysql2 gem 来解决此问题,如下所示:

gem 'mysql2', '~> 0.2.7'

您还需要确保您的 config/database.yml 指定了 mysql2 适配器:

production:
  adapter: mysql2

如果它改为 mysql,您最终会收到一条错误消息,说明您必须安装 mysql2 gem(即使您已经安装了)。

这两个答案也记录在here,顺便说一句。

【讨论】:

  • 我使用的是 rails 3.1,忘了说。我有 mysql2 作为生产环境的适配器。我假设由于我的生产环境在共享服务器上,Bundler 不需要在我的本地机器上安装 mysql gem?
  • 不,它没有。您可以在本地运行 bundle install --without production 以在您的开发环境中排除该组。但是,这不会将 mysql2 gem 添加到您的 Gemfile.lock。
【解决方案2】:

查看您的 .bundle/config 文件。如果有类似的东西

BUNDLE_WITHOUT: production

只需删除此行并再次运行RAILS_ENV=production bundle install

【讨论】:

    猜你喜欢
    • 2013-01-26
    • 1970-01-01
    • 2018-06-04
    • 2015-04-14
    • 1970-01-01
    • 1970-01-01
    • 2020-06-02
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多