2017-03-08 100 views
0

我想在Heroku上部署Rails項目。我的Rails應用程序使用mysql2使用Ruby on Rails在Heroku上部署MySQL數據庫

我已經嘗試使用taps寶石,但它不工作。我收到以下錯誤,當我運行命令taps server mysql://[email protected]/heroku_ex tempuser tempass

Failed to connect to database: Sequel::AdapterNotFound -> LoadError: cannot load such file -- mysql

有什麼辦法來部署我在Heroku上的應用程序?如果可能,我寧願只使用免費的附加組件。

+0

您需要將db更改爲postgres –

+0

@DeepakMahakale,那是不正確的。 Heroku支持PostgreSQL開箱即用,但它也通過插件支持其他數據庫。 – Chris

+0

「它不工作」是什麼意思?你收到錯誤信息了嗎? – Chris

回答

1

這裏有幾個移動部件。

首先,Heroku默認不支持MySQL。如果你想使用MySQL而不是PostgreSQL,你需要配置一個add-on that provides it。目前至少有兩個附加組件提供MySQL或MariaDB¹支持,其中包含免費的tier2。

接下來,Heroku不運行localhost上的數據庫服務器。如何處理開發機器和Heroku服務器之間的不同數據庫配置?

endorsed by Heroku的一個策略是將配置存儲在環境中。遵循此模型,您可以通過修改環境變量而不是編輯文件來更改應用程序的配置。幸運的是,Rails似乎是override config/database.yml with configuration from the DATABASE_URL variable by default,所以這種方法應該很好。

很多時候數據庫插件會自動爲你設置一個環境變量。例如,JawsDB Maria add-on sets JAWSDB_MARIA_URL when it is provisioned。這不是Rails尋找的變量,因此您必須告訴Rails尋找JAWSDB_MARIA_URL而不是DATABASE_URL或手動設置DATABASE_URL以包含JawsDB在JAWSDB_MARIA_URL中提供的相同URL。


¹MariaDB是MySQL的一個分支,旨在實現完全兼容。

²請注意免費套餐可能非常有限,通過只提供5MB的存儲空間。繼續開發應用程序時,您可能必須升級到付費數據庫層。

-2

我已經通過在開發環境中添加生產中的pg gem和mysql2來解決此問題。

group :development, :test do 
gem 'mysql2' 
end 

group :production do 
gem 'listen', '~> 3.0.5' 
gem 'pg' 
    # Spring speeds up development by keeping your application running in the background. Read more: https://github.com/rails/spring 
gem 'spring' 
gem 'spring-watcher-listen', '~> 2.0.0' 
end 
+1

使用一個數據庫引擎開發(並測試!)並將其部署到一個完全不同的數據庫引擎是一個非常糟糕的主意。您幾乎肯定會在每個環境中遇到不出現在其他環境中的問題。我強烈要求你在Heroku上使用MySQL(如我所描述的),或者切換到PostgreSQL進行開發和測試。 – Chris