Mysql RoR:如何针对多个数据库测试我的应用程序?

Mysql RoR:如何针对多个数据库测试我的应用程序?,mysql,ruby-on-rails,sqlite,postgresql,rspec,Mysql,Ruby On Rails,Sqlite,Postgresql,Rspec,我开始在Heroku上部署我最新的RoR应用程序,这要求我开始使用PostgreSQL——我以前使用过SQLite和MySQL。我想要一种非常简单的方法来持续对所有三个数据库进行红/绿测试,以确保我在开发的热度中没有破坏任何东西 做这件事的好方法是什么?@awendt善意地指出,我可以回答我自己的问题 原来配方很简单。秘密在于使用一个环境变量告诉Rails您想要使用哪个db 1.修改您的文件 在config/database.yml中,包含如下ERB结构: test: <% if (ENV

我开始在Heroku上部署我最新的RoR应用程序,这要求我开始使用PostgreSQL——我以前使用过SQLite和MySQL。我想要一种非常简单的方法来持续对所有三个数据库进行红/绿测试,以确保我在开发的热度中没有破坏任何东西


做这件事的好方法是什么?

@awendt善意地指出,我可以回答我自己的问题

原来配方很简单。秘密在于使用一个环境变量告诉Rails您想要使用哪个db

1.修改您的文件 在config/database.yml中,包含如下ERB结构:

test:
<% if (ENV["RAILS_DB"] == "PostgreSQL") %>
  adapter: postgresql
  encoding: unicode
  database: bd_test
  pool: 5
  username: <%= ENV['POSTGRESQL_USERNAME'] || 'root' %>
  password: <%= ENV['POSTGRESQL_PASSWORD'] || '' %>
<% elsif (ENV["RAILS_DB"] == "MySQL") %>
  adapter: mysql
  encoding: utf8
  reconnect: false
  database: bd_test
  pool: 5
  username: <%= ENV['MYSQL_USERNAME'] || 'root' %>
  password: <%= ENV['MYSQL_PASSWORD'] || '' %>
  socket: <%= ENV['MYSQL_SOCKET'] || '/tmp/mysql.sock' %>
<% else %>
  # default to SQLite
  adapter: sqlite3
  database: db/test.sqlite3
  pool: 5
  timeout: 5000
<% end %>
2.向代码中添加条件 尽管Rails开发团队尽了最大的努力,但仍有一些地方ActiveRecord构造无法兼容所有类型的数据库。在这些情况下,您可以在ActiveRecord::Base.connection.adapter\u name上调整代码。下面是我的一个迁移文件的示例:

文件:migrate/20110129023453_create_cached_web_pages.rb

3.运行和测试 现在,只需设置RAILS_DB环境变量即可选择数据库,但有一个问题:每次都必须运行bundle install,以便从GEM文件中设置适当的数据库适配器。幸运的是,这正是测试代码所做的。例如,我可以在两个窗口中运行rspec的自动测试:

$ RAILS_DB=SQLite autotest


现在我可以黑客攻击我的文件,如果我在进行过程中破坏了任何东西,自动测试会悄悄地提醒我。

@awendt善意地指出,我可以回答我自己的问题

原来配方很简单。秘密在于使用一个环境变量告诉Rails您想要使用哪个db

1.修改您的文件 在config/database.yml中,包含如下ERB结构:

test:
<% if (ENV["RAILS_DB"] == "PostgreSQL") %>
  adapter: postgresql
  encoding: unicode
  database: bd_test
  pool: 5
  username: <%= ENV['POSTGRESQL_USERNAME'] || 'root' %>
  password: <%= ENV['POSTGRESQL_PASSWORD'] || '' %>
<% elsif (ENV["RAILS_DB"] == "MySQL") %>
  adapter: mysql
  encoding: utf8
  reconnect: false
  database: bd_test
  pool: 5
  username: <%= ENV['MYSQL_USERNAME'] || 'root' %>
  password: <%= ENV['MYSQL_PASSWORD'] || '' %>
  socket: <%= ENV['MYSQL_SOCKET'] || '/tmp/mysql.sock' %>
<% else %>
  # default to SQLite
  adapter: sqlite3
  database: db/test.sqlite3
  pool: 5
  timeout: 5000
<% end %>
2.向代码中添加条件 尽管Rails开发团队尽了最大的努力,但仍有一些地方ActiveRecord构造无法兼容所有类型的数据库。在这些情况下,您可以在ActiveRecord::Base.connection.adapter\u name上调整代码。下面是我的一个迁移文件的示例:

文件:migrate/20110129023453_create_cached_web_pages.rb

3.运行和测试 现在,只需设置RAILS_DB环境变量即可选择数据库,但有一个问题:每次都必须运行bundle install,以便从GEM文件中设置适当的数据库适配器。幸运的是,这正是测试代码所做的。例如,我可以在两个窗口中运行rspec的自动测试:

$ RAILS_DB=SQLite autotest


现在我可以黑客攻击我的文件,如果我在进行过程中破坏了任何东西,自动测试将悄悄地提醒我。

根据常见问题解答,这是一个有合法答案的问题。我想其他人可能会觉得它有用。不,这是问题部分的问题+答案。请在你的答案下面回答你自己的问题,并接受这个答案。这样,这将从未应答队列中移动。谢谢根据faq,这是一个答案合法的问题。我想其他人可能会觉得它有用。不,这是问题部分的问题+答案。请在你的答案下面回答你自己的问题,并接受这个答案。这样,这将从未应答队列中移动。谢谢
$ RAILS_DB=PostgreSQL autotest