代码之家  ›  专栏  ›  技术社区  ›  Eduardo León

带有内存数据库的Rails

  •  11
  • Eduardo León  · 技术社区  · 17 年前

    我可以将rails设置为使用带有内存的mysql作为DB引擎吗?我从不重新启动mysql,而且经常重建数据库,我希望它速度更快。拥有用于运行测试的内存数据库也很好。

    编辑:我应该指定这仅用于开发/测试,而不是生产。

    3 回复  |  直到 17 年前
        1
  •  6
  •   SFEley    17 年前

    我不明白你为什么不能;您选择的存储引擎是一个MySQL实现细节。你所需要做的就是设定 :options => "ENGINE=MEMORY" 在你的 创建表 迁移中的声明。

    当然,我也不明白你为什么 --特别是在生产方面。内存引擎的MySQL文档是 full of caveats

        2
  •  2
  •   Jason stewart    17 年前

    我使用sqlite3内存数据库进行测试。它通常比基于文件的要快一点,但除非您有大量的测试数据,否则不会太快。

    要设置数据库,请执行以下操作:

    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")
    
        3
  •  1
  •   Alexey    15 年前

    出于测试目的考虑 https://github.com/mvz/memory_test_fix 插件。它的使用和更新一样简单 database.yml

    rails plugin install git://github.com/mvz/memory_test_fix.git
    

    您也可以尝试安装memory\u test\u fix gem,但它来自不同的git分支,不支持Rails 3。

    gem帮助我将测试用例执行时间从25秒减少到19秒。另一方面,它在数据库模式初始化上引入了2秒钟的开销(我没有那么多)。因此,在小范围的测试中,不值得费心。

    Jason Stewart回答的答案基本相同。我用它代替插件,因为它更容易与Spork插件结合。