2013-06-21 40 views
3

我有一個應用程序部署在使用postgresql作爲數據庫的heroku中。我創建將連接到遠程MySQL數據庫像下面這樣的新模式:Heroku:數據庫配置沒有指定適配器

# other_database.rb(apps/models/) 
class OtherDatabase < ActiveRecord::Base 
    self.abstract_class = true 
    establish_connection "remote_#{Rails.env}" 
end 

# other_model.rb(apps/models/) 
class OtherModel < OtherDatabase 
    self.table_name = "users" 
end 

我還編輯database.yml文件,並添加這些項:

remote_development: 
    adapter: mysql2 
    encoding: utf8 
    reconnect: false 
    database: app_development 
    pool: 5 
    username: root 
    password: 
    socket: /var/run/mysqld/mysqld.sock 

remote_production: 
    adapter: mysql2 
    encoding: utf8 
    reconnect: true 
    database: app_production 
    pool: 40 
    username: root 
    password: secretpassword 
    socket: /var/run/mysqld/mysqld.sock 
    host: 12.34.56.78 

遠程數據庫使用mysql作爲它的數據庫。

它工作正常,在我的本地機器,但是當我把它部署到Heroku的,它創建了一個錯誤頁面,讓我擡頭對Heroku的日誌,我發現這一個:

/app/vendor/bundle/ruby/2.0.0/gems/activerecord-4.0.0.beta1/lib/active_record/connection_adapters/connection_specification.rb:52:in `resolve_hash_connection': database configuration does not specify adapter (ActiveRecord::AdapterNotSpecified) 
from /app/vendor/bundle/ruby/2.0.0/gems/activerecord-4.0.0.beta1/lib/active_record/connection_adapters/connection_specification.rb:46:in `resolve_string_connection' 

我花了幾乎所有的時間尋找答案,但無濟於事。希望任何人都可以幫助解決這個問題。

TIA。

Eralph

回答

3

Heroku的刪除並重新創建database.yml文件。這意味着你放在你的database.yml文件中的東西將被heroku完全忽略。

流行的數據庫憑據在你的establish_connection方法調用就像這樣:

establish_connection(
    adapter: 'mysql2', 
    encoding: 'utf8', 
    reconnect: true, 
    database: 'app_production', 
    pool: 40, 
    username: 'root', 
    password: 'secretpassword', 
    socket: '/var/run/mysqld/mysqld.sock', 
    host: '12.34.56.78' 
) 

但是它會更好,在Heroku的使用數據庫的URL,並將其存儲在一個環境變量。

heroku config:set MYSQL_DB_URL=http://example.com/rest_of_the_url 

然後用

establish_connection(ENV['MYSQL_DB_URL']) 

實例和一個URL文檔可以在這裏找到:http://forums.mysql.com/read.php?39,10734,10750

+0

感謝您的快速回復。你如何設置用戶名和密碼,以及使用環境變量鏈接的數據庫名稱? – Eralph

+0

heroku配置:設置DB_USERNAME =用戶名DB_PASSWORD =密碼然後通過ENV ['DB_USERNAME']和ENV ['DB_PASSWORD']引用它們 –

+0

我會試試這個功能,並會在出現問題時通知您。謝謝。 – Eralph

相關問題