我目前有一個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寶石這似乎意味着它仍在努力使用開發或生產服務器。
設置的Postgres OIN的Windows不應該是痛苦的。用SQLite開發,但在生產中使用Postgres,現在這是一個痛苦,而且是一個大問題。我會建議爲兩者使用相同的RDBMS。 –
開發一個,切換到另一個對我來說很容易;只是對我的database.yml進行了一些更改,並將「gem'pg'」添加到我的gem文件中。我真正想要的是一種解決方案,無需在每次部署時重複進行這些更改。 – Alex
這一切都很好 - 直到它不是。有細微的差異可能會破壞你的代碼或稍微改變行爲,甚至沒有意識到它(直到有人抱怨)。 [喜歡在這個相關的問題。](http://stackoverflow.com/questions/11249059/generic-ruby-solution-for-sqlite3-like-or-postgresql-ilike) –