1

我在我的 rails 3 项目中使用 gem,“rails-settings-cached”,当我处于开发模式时,gem 可以毫无问题地访问数据库。但是,当我运行“rake test”时,很多测试都失败了,因为“rails-settings-cached”继续使用开发数据库而不是测试数据库。

我的应用程序的其他部分工作正常。我应该怎么做才能将 gem 连接到正确的数据库?

development:
  adapter: mysql2
  encoding: utf8
  reconnect: false
  database: mmdb_development
  pool: 5
  username: ***
  password: ***
  socket: /var/run/mysqld/mysqld.sock

test:
  adapter: mysql2
  encoding: utf8
  reconnect: false
  database: mmdb_test
  pool: 5
  username: ***
  password: ***
  socket: /var/run/mysqld/mysqld.sock
4

3 回答 3

2

问题是 rails-settings-cached ......好吧......缓存了设置。因此,当您运行测试时,它实际上使用的是“开发”数据库中的旧缓存值。

可以rake tmp:cache:clear在测试之前和之后运行可能的解决方法。它可以工作,但要使其自动化,您可以将这些方法放入test_helper.rb

def setup
  Rails.cache.clear
end

def teardown
  Rails.cache.clear
end
于 2012-05-08T17:51:53.087 回答
1

缓存的问题rails-settings-cached在于 Rails 3.2.8(可能在 Rails 3 上)中的默认缓存是ActiveSupport::Cache::FileStore. 这缓存到位于共享位置的文件,因此在开发、测试和生产之间共享。这可能会导致各种问题!

Caching with Rails Guide声称默认值为,ActiveSupport::Cache::MemoryStore但文档似乎不正确。我已经提交了一个关于明显文档不准确的问题。

一种解决方案是将测试和开发切换到使用ActiveSupport::Cache::MemoryStore. 如果默认的 32 兆字节就足够了,您可以简单地将以下行添加到 bothdevelopment.rbtest.rbin config/environments.configure do当然是在块内):

config.cache_store = :memory_store
于 2012-11-06T19:02:13.817 回答
0

尝试在 test_helper.rb 文件顶部的 test/test_helper.rb 中明确设置您的 rals env 进行测试

ENV["RAILS_ENV"] = "test"
于 2012-04-27T14:47:08.057 回答