我正在将我们的 Rails 2.3.8 应用程序之一升级到 Rails 3,并且遇到了一个令人讨厌的捆绑器和部署问题。我在 Windows 机器上开发应用程序,但生产环境运行的是 Ubuntu Linux。现在,我的问题是捆绑器忽略了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。这显然不是我想要的,因为当在 Linux 下运行时,该 gem 不适合(并且似乎被忽略)。
那么,Bundler 是否有任何方法来处理这些问题?或者我是否必须记住Gemfile.lock
每次在我的开发机器上运行 bundle install 时手动更改生成的 mysql gem 版本?
先感谢您!
更新
捆绑器团队似乎意识到了这个问题。