我正在將我們的Rails 2.3.8應用之一升級到Rails 3,並且已經遇到了捆綁器和部署的令人討厭的問題。我在Windows機器上開發應用程序,但生產環境正在運行Ubuntu Linux。現在,我的問題是bundler在生產環境中忽略了mysql
寶石,而乘客吐出了:「!!!缺少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
寶石。但是,在部署時,捆綁器會忽略它。爲什麼?其原因是,捆紮機生成以下Gemfile.lock
(僅相關部分包括):
....
mime-types (1.16)
mysql (2.8.1-x86-mingw32)
net-ldap (0.1.1)
....
注意,它包括特定於平臺的寶石。這顯然不是我想要它做的事情,因爲在Linux下運行時,gem不適合(並且顯然被忽略)。
那麼,Bundler有任何方式來處理這些問題嗎?或者我必須記得手動更改生成的Gemfile.lock
中的mysql gem版本,每次我在開發機器上運行軟件包安裝時?
預先感謝您!
更新
這似乎是捆綁隊已經意識到了這個issue的。
我有一個類似的問題,我需要在Windows上使用rmagick 2.12.0,但在任何其他Ruby平臺上的當前版本。 Bundler錯誤,如果我嘗試丟失兩次rmagick。 – 2010-11-01 13:05:40
請嘗試手動將MySQL(2.8.1)添加到Gemfile.lock。在我們的Gemfile.lock中,我們有'sqlite3-ruby(1.3.1)'_and_'sqlite3-ruby(1.3.1-x86-mingw32)' – oma 2010-11-05 15:58:47
Morten,這實際上就是我今天所做的。不幸的是,捆綁軟件運行時,Bundler會刪除「原始」mysql行(並且只保留Windows版本)。 – 2010-11-06 07:08:09