【发布时间】:2013-06-28 22:23:28
【问题描述】:
我目前有一个 Rails 项目,我将其部署到使用 postgres 数据库的生产服务器上。我在 Windows 中开发我的 rails 项目,这意味着如果我想在本地进行测试,我必须将我的 database.yml 文件中的所有数据库从 postgres 更改为 sqlite3(因为设置 Windows 以运行 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 %>
这样我可以在本地运行 rails s -e test 并使用 sqlite3 数据库进行测试,但是当我部署到我的开发和生产服务器时,我可以使用 postgres。
我遇到的问题是,通过上面显示的对我的 database.yml 的更改,当我在本地运行 rails s -e test 时,我收到一条错误消息,说 rails 找不到 pg gem,这似乎暗示它仍然存在尝试使用开发服务器或生产服务器。
【问题讨论】:
-
在 Windows 中设置 Postgres 一点也不痛苦。使用 SQLite 进行开发,但在生产中使用 Postgres,现在这很痛苦,而且很大。我建议对两者使用相同的 RDBMS。
-
对我来说开发一个并切换到另一个非常容易;只需对我的 database.yml 进行一些更改并将“gem 'pg'”添加到我的 gemfile 中。我真正想要的是一种解决方案,让我不必在每次部署时都重复进行这些更改。
-
这一切都很好 - 直到它不是。有些细微的差异可能会破坏您的代码或稍微改变行为,而您甚至都没有意识到(直到有人抱怨)。 Like in this related question.
标签: ruby-on-rails database ruby-on-rails-3 sqlite rails-postgresql