是否可以将rails设置为使用带有内存的mysql作为DB引擎?我从来不重启mysql,并且经常重建数据库,我宁愿它快一点。拥有用于运行测试的内存数据库也会很好。
编辑:我应该指定这只用于开发/测试,而不是生产。
发布于 2009-10-22 05:33:11
我不明白为什么您不能;您选择的存储引擎是一个MySQL实现细节。您所需要做的就是在迁移的create_table声明中设置:options => "ENGINE=MEMORY"。
当然,我也不明白您为什么要这样做--尤其是在生产中。内存引擎的MySQL文档是full of caveats,就像固定长度字段分配一样,与丢失一切的风险相比,您意识到的速度增益是微不足道的。如果你的应用程序不需要持久化,为什么不完全跳过ActiveRecord,在Memcached之上分层你的模型呢?
发布于 2009-10-22 02:11:00
我使用内存数据库中的sqlite3进行测试。它通常比基于文件的速度快一点,但不会那么快,除非你有大量的测试数据。
要设置它,您的database.yml将如下所示:
test:
adapter: sqlite3
database: ":memory:"您还必须将模式加载到测试助手中的内存数据库中,如下所示:
config = YAML::load(IO.read(File.dirname(__FILE__) + "/../config/database.yml"))
ActiveRecord::Base.logger = Logger.new(File.dirname(__FILE__) + "/../log/debug.log")
ActiveRecord::Base.establish_connection(config["test"])
load(File.dirname(__FILE__) + "/../db/schema.rb")发布于 2011-03-20 00:42:23
出于测试目的,考虑使用https://github.com/mvz/memory_test_fix插件。它使用起来就像更新database.yml和运行一样简单
rails plugin install git://github.com/mvz/memory_test_fix.git你也可以尝试安装git,但是它来自不同的memory_test_fix分支,并且不支持Rails3。
gem帮助我将测试用例的执行时间从25秒减少到19秒。另一方面,它在数据库模式初始化上引入了2秒的开销(我没有那么多开销)。因此,在小的测试集上,这不值得麻烦。
Jason Stewart的答案基本上是相同的。我使用它而不是插件,因为它更容易与Spork插件相结合。
https://stackoverflow.com/questions/1602494
复制相似问题