2011-12-06 170 views
1

我的rails應用程序(rails 3.1)的開發和測試環境我使用mysqlite3,它工作正常。對於共享服務器上的生產環境,我使用mysql。一切部署細跟Capistrano的,但後來乘客給出了這樣的錯誤:「請安裝mysql2適配器:(。mysql2不是包的一部分將它添加到Gemfile中)gem install activerecord-mysql2-adapter生產環境所需的Mysql2,而不是開發環境

因此,我已將此添加的Gemfile:

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

但是當我做一個「捆綁安裝」它說它找不到那個寶石。當我試圖首先添加mysql2 gem時,它會嘗試將它安裝在我的本地Mac上(這很痛苦),而我認爲它只能安裝在共享服務器上?

+0

通過'mysqlite3',你的意思是'sqlite3'嗎? – Frost

+0

是的,對不起我的錯誤;-) – John

回答

1

Bundler無法找到寶石activerecord-mysql2-adapter,因爲沒有這樣的寶石。

如果您使用的是太新的mysql2版本(我相信~> 0.3.x),則會遇到此錯誤。這是因爲這些版本應該用於Rails 3.1及更高版本。

您可以通過升級您的應用程序解決此問題到Rails要在mysql2寶石的具體版本3.1或告訴你的Gemfile,像這樣:

gem 'mysql2', '~> 0.2.7' 

您還需要確保你的config/database.yml指定mysql2適配器:

production: 
    adapter: mysql2 

如果說mysql相反,你會擁有一個錯誤信息說一些你不必安裝mysql2寶石(即使你已經這樣做)。

這兩個答案也記錄在here,順便說一句。

+0

我使用rails 3.1,忘了提及。我有mysql2作爲生產環境的適配器。我假設由於我的生產環境位於共享服務器上,Bundler不需要在本地機器上安裝mysql gem? – John

+0

不,它沒有。您可以在本地運行'bundle install --without production'來在開發環境中排除該組。但是,這不會將mysql2 gem添加到Gemfile.lock中。 – Frost

0

看看你的.bundle/config文件。如果有類似的東西

BUNDLE_WITHOUT: production 

只需刪除此行並再次運行RAILS_ENV=production bundle install