Rails с базой данных в памяти

Могу ли я установить рельсы для использования mysql с MEMORY в качестве движка БД? Я никогда не перезапускаю mysql и не перестраиваю базу данных так часто, что я бы предпочел, чтобы это было быстро. Было бы неплохо иметь базу данных для запуска тестов.

РЕДАКТИРОВАТЬ: я должен был указать, что это только для разработки / тестирования, а не производства.

3 ответа

Решение

Я не понимаю, почему ты не мог; Ваш выбор механизма хранения - это деталь реализации MySQL. Все, что вам нужно сделать, это установить :options => "ENGINE=MEMORY" в вашем объявлении create_table в ваших миграциях.

Конечно, я также не понимаю, почему вы это сделали, особенно на производстве. Документация MySQL для движка MEMORY полна предостережений, таких как распределение полей фиксированной длины, и увеличение скорости, которое вы понимаете, должно быть тривиальным по сравнению с риском потерять все. Если ваше приложение таково, что ничего не нужно сохранять, почему бы просто не пропустить ActiveRecord полностью и не наложить свои модели поверх Memcached?

Я использую 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")

В целях тестирования рассмотрите плагин https://github.com/mvz/memory_test_fix. Это использование так же просто, как обновить database.yml и бежать

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

Вы также можете попробовать установить гем memory_test_fix, но он находится в другой ветке git и не поддерживает Rails 3.

Драгоценный камень помог мне сократить время выполнения тестовых примеров с 25 секунд до 19. С другой стороны, он вводит 2-секундные накладные расходы на инициализацию схемы базы данных (а у меня их не так уж много). Поэтому на небольших тестах это не стоит беспокоить.

Решение от ответа Джейсона Стюарта в основном то же самое. И я использовал его вместо плагина, потому что было проще объединить его с плагином Spork.

Другие вопросы по тегам