2015-01-09 71 views
3

我最近升級到了Rails的最新版本,我不知道如何應用程序部署到Heroku的。如何配置部署database.yml,以Heroku的

這是我database.yml文件

default: &default 
    adapter: postgresql 
    pool: 5 
    timeout: 5000 

development: 
    <<: *default 
    database: db/development.sqlite3 

test: 
    <<: *default 
    database: db/test.sqlite3 

production: 
    <<: *default 
    database: db/production.sqlite3 

我從來沒有在database.yml中見過這個語法。有誰知道如何配置這個?

它看起來比一個很大的不同是什麼我已經習慣了

development: 
adapter: mysql2 
encoding: utf8 
database: my_app_development 
pool: 5 
username: root 
password: 

test: 
adapter: mysql2 
encoding: utf8 
database: my_app_test 
pool: 5 
username: root 
password: 


production: 
adapter: mysql2 
encoding: utf8 
database: ymca_gym_production 
pool: 5 
username: root 
password: 

感謝

回答

1

對於Heroku上,你將不得不使用PostgreSQL,因爲它不支持mysql2。 Heroku有自己的機制來處理數據庫,你可以在這裏閱讀更多關於:https://devcenter.heroku.com/articles/heroku-postgresql

本質上,對待「heroku的數據庫」和你在這個文件中定義的本地數據庫完全不同。這將是您更輕鬆地使用SQLite,讓本地和測試環境和生產,你應該改變你的YAML代碼如下:

development: 
adapter: mysql2 
encoding: utf8 
database: my_app_development 
pool: 5 
username: root 
password: 

test: 
    adapter: sqlite3 
    database: db/development.sqlite3 
    pool: 5 
    timeout: 5000 

production: 
     adapter: postgresql 
     database: my_database_production 
     pool: 5 
     timeout: 5000 

上面的代碼還不足以讓它工作在Heroku的是,你還需要編輯如下的gemfile內容:

gem 'pg', :group => :production 
gem 'mysql2' , :group => :development 
gem 'sqlite3', :group => :test 

我已經根據我寫的database.yaml代碼創建了gemfile代碼。您可以將mysql2用於開發和測試環境。如果你這樣做,你可以改變的Gemfile內容如下圖所示:

gem 'pg', :group => :production 
gem 'mysql2' , :group => [:development, :test] 

希望這有助於.. :)

+0

「對於本地和測試環境使用sqlite會更容易」是不好的建議。兩者之間存在細微差別(即PG字符串列長度限制),只有將應用程序部署到_other_環境時纔會發現這兩者之間的差異。您通常希望您的開發環境儘可能接近您的生產環境,以避免在我的machine_類錯誤上運行。 – pdoherty926

+0

我自己在所有環境中使用PostgreSQL。我之所以這麼說,是因爲大多數人都喜歡使用sqlite3,因爲它輕鬆簡單。 :) –

0

在YAML

<<: *default

這意味着要附加默認到組,所以這

default: &default 
    adapter: postgresql 
    pool: 5 
    timeout: 5000 

development: 
    <<: *default 
    database: db/development.sqlite3 

等於該

development: 
    adapter: postgresql 
    pool: 5 
    timeout: 5000 
    database: db/development.sqlite3 
0

我不知道這是否是你想要什麼,但我只花了一個同時自己想出來,所以我想我會在這裏發佈。

ActiveRecord的支持無論是從環境變量DATABASE_URL和database.yml文件獲取數據庫連接信息。在任何情況下使用哪一個都可能有點棘手。幸運的是,這已經大多被照顧的 - 看到大部分細節this拉請求。

簡短的說法是,如果database.yml中沒有url密鑰,那麼DATABASE_URL中的信息將自動覆蓋database.yml中的所有可設置的URL,包括用戶名,密碼,服務器,端口,適配器和數據庫名稱。如果在database.yml的一個URL關鍵,那麼覆蓋DATABASE_URL的環境變量和其他一切與它在database.yml中的條目衝突。

由於Heroku自動設置了完整的DATABASE_URL,基本上除池和編碼以外的所有內容均取自該文件,並且database.yml生產部分中其他內容的條目將被忽略。所以你可以將它們留空,或者在你的開發機器上設置一些對你更方便的東西。

由於可以把ERB在YML文件,some sources建議您明確提出

production: 
    url: <%= ENV['DATABASE_URL'] %> 

在database.yml,以明確設置URL作爲的環境變量。這更清楚地表明,無論在env var中是否意味着覆蓋yml中的所有內容。