gpt4 book ai didi

ruby-on-rails - 让 bundler 针对不同平台使用不同的 gem

转载 作者:行者123 更新时间:2023-12-03 06:18:55 24 4
gpt4 key购买 nike

我正在努力将我们的 Rails 2.3.8 应用程序之一升级到 Rails 3,但在 bundler 和部署方面遇到了恼人的问题。我在 Windows 机器上开发应用程序,但生产环境运行 Ubuntu Linux。现在,我的问题是,bundler 在生产环境中忽略了 mysql gem,并且 Passenger 吐出: "!!! 缺少 mysql gem。将其添加到您的 Gemfile 中: gem 'mysql ', '2.8.1'"

这是我的Gemfile:

# Edit this Gemfile to bundle your application's dependencies.
# This preamble is the current preamble for Rails 3 apps; edit as needed.
source 'http://rubygems.org'

gem 'rails', '3.0.0'
gem 'net-ldap', :require => 'net/ldap'
gem 'highline', :require => 'highline/import'
gem 'mysql', '2.8.1'
gem 'net-ssh', :require => 'net/ssh'

# Bundle gems for the local environment. Make sure to
# put test-only gems in this group so their generators
# and rake tasks are available in development mode:
group :development, :test do
gem 'fakeweb', :require => 'fakeweb'
gem 'flexmock', :require => 'flexmock/test_unit'
end

如您所见,指定了 mysql gem。但是,在部署时,bundler 会忽略它。为什么?原因是 Bundler 生成了以下 Gemfile.lock(仅包含相关部分):

....
mime-types (1.16)
mysql (2.8.1-x86-mingw32)
net-ldap (0.1.1)
....

请注意,它包括特定于平台的 gem。这显然不是我想要它做的,因为该 gem 在 Linux 下运行时不适合(并且似乎被忽略)。

那么,Bundler 有办法解决这些问题吗?或者每次我在开发计算机上运行 bundle 安装时,我是否必须记住手动更改生成的 Gemfile.lock 中的 mysql gem 版本?

提前谢谢您!

更新

bundler 团队似乎意识到了这一点 issue .

最佳答案

这是一个known issue in Bundler 。解决方法是:

  • 在与您的生产环境足够相似的系统上生成 Gemfile.lock,以便您获得与您的生产平台匹配的结果。实际上,这意味着如果您的生产系统是 Windows,则只能在 Windows 上生成 Gemfile.lock 文件。
  • 根本不要提交 Gemfile.lock 文件,并在部署时确定生产计算机上的依赖关系(bundle install 不带 --deploy)。虽然一般不建议这样做,但在错误修复之前这是一种常用的解决方法。例如,这是 Heroku 提供的推荐解决方案。
  • 切换到 JRuby,它在 Windows 和 Linux (java) 上具有相同的平台字符串。我并不认真推荐这个,但我相信它可以解决问题。
  • 修复Bundler源代码中的问题,即帮助Bundler团队修复bug。 :)

关于ruby-on-rails - 让 bundler 针对不同平台使用不同的 gem,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3642085/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com