在Rails中使用Sqlite3测试数据库和Postgres开发/生产数据库

20 浏览
0 Comments

在Rails中使用Sqlite3测试数据库和Postgres开发/生产数据库

我目前有一个Rails项目,部署到一个使用Postgres数据库的生产服务器上。我在Windows上开发我的Rails项目,这意味着如果我想在本地测试,我必须将database.yml文件中的所有数据库从postgres改为sqlite3(因为设置Windows运行postgres服务器似乎很麻烦)。

我想要做的是像这样格式化我的database.yml文件:

开发环境:

  适配器:postgresql

  编码:utf8

  数据库:<%= begin IO.read(“/home/www-data/.db/.dev_name”)rescue“”end %>

  池:5

  用户名:<%= begin IO.read(“/home/www-data/.db/.user”)rescue“”end %>

  密码:<%= begin IO.read(“/home/www-data/.db/.pass”)rescue“”end %>

#警告:当您运行“rake”时,“test”定义的数据库将从开发数据库中清除并重新生成。

#不要将此数据库设置为与开发或生产相同。

测试环境:

  适配器:sqlite3

  数据库:db/test.sqlite3

  池:5

  超时:5000

生产环境:

  适配器:postgresql

  编码:utf8

  数据库:<%= begin IO.read(“/home/www-data/.db/.prod_name”)rescue“”end %>

  池:5

  用户名:<%= begin IO.read(“/home/www-data/.db/.user”)rescue“”end %>

  密码:<%= begin IO.read(“/home/www-data/.db/.pass”)rescue“”end %>

这样我就可以在本地使用sqlite3数据库运行rails s -e test进行测试,但当我部署到开发和生产服务器时,我可以使用postgres。

我遇到的问题是,使用上述更改的database.yml文件时,当我在本地运行rails s -e test时,我会收到一个错误,说rails无法找到pg gem,这似乎意味着它仍然尝试使用开发或生产服务器。

0
0 Comments

问题的出现原因是在Rails中同时使用Sqlite3测试数据库和Postgres开发/生产数据库。解决方法是在Gemfile中使用group来分组指定不同环境下所使用的数据库。

具体的解决方法如下:

在Gemfile中添加以下代码:

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

这样就可以分别指定在开发和生产环境中使用Postgres数据库,在测试环境中使用Sqlite3数据库。

非常感谢,这正是我一直在寻找的解决方法!

0