0

我目前有一個rails項目,我將其部署到使用postgres數據庫的生產服務器。我在Windows中開發我的rails項目,這意味着如果我想在本地進行測試,我必須將我的database.yml文件中的所有數據庫從postgres更改爲sqlite3(因爲設置Windows運行postgres服務器似乎是痛苦)。在Rails中使用Sqlite3測試數據庫和Postgres開發/生產數據庫

我想做什麼就能做的是格式我database.yml的是這樣的:

development: 
    adapter: postgresql 
    encoding: utf8 
    database: <%= begin IO.read("/home/www-data/.db/.dev_name") rescue "" end %> 
    pool: 5 
    username: <%= begin IO.read("/home/www-data/.db/.user") rescue "" end %> 
    password: <%= begin IO.read("/home/www-data/.db/.pass") rescue "" end %> 

# Warning: The database defined as "test" will be erased and 
# re-generated from your development database when you run "rake". 
# Do not set this db to the same as development or production. 
test: 
    adapter: sqlite3 
    database: db/test.sqlite3 
    pool: 5 
    timeout: 5000 

production: 
    adapter: postgresql 
    encoding: utf8 
    database: <%= begin IO.read("/home/www-data/.db/.prod_name") rescue "" end %> 
    pool: 5 
    username: <%= begin IO.read("/home/www-data/.db/.user") rescue "" end %> 
    password: <%= begin IO.read("/home/www-data/.db/.pass") rescue "" end %> 

這樣我可以用一個sqlite3的數據庫在本地和試運行rails s -e test,但是當我部署到我的開發和生產服務器我可以使用postgres。

我遇到的問題是,所改動我的database.yml如上圖所示,當我運行rails s -e test本地我得到一個錯誤,說軌道找不到PG寶石這似乎意味着它仍在努力使用開發或生產服務器。

+1

設置的Postgres OIN的Windows不應該是痛苦的。用SQLite開發,但在生產中使用Postgres,現在這是一個痛苦,而且是一個大問題。我會建議爲兩者使用相同的RDBMS。 –

+0

開發一個,切換到另一個對我來說很容易;只是對我的database.yml進行了一些更改,並將「gem'pg'」添加到我的gem文件中。我真正想要的是一種解決方案,無需在每次部署時重複進行這些更改。 – Alex

+0

這一切都很好 - 直到它不是。有細微的差異可能會破壞你的代碼或稍微改變行爲,甚至沒有意識到它(直到有人抱怨)。 [喜歡在這個相關的問題。](http://stackoverflow.com/questions/11249059/generic-ruby-solution-for-sqlite3-like-or-postgresql-ilike) –

回答

2

與所有的警告承認,該問題的答案是使用group in your Gemfile

gem 'pg', group: [:development, :production] 
gem 'sqlite3', group: :test 
+0

正是我一直在尋找!非常感謝 – Alex

相關問題