Рельсы в базе данных памяти

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

EDIT: я должен был указать, что это только для dev/testing, а не для производства.

Ответ 1

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

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

Ответ 2

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

Ответ 3

Для целей тестирования рассмотрите https://github.com/mvz/memory_test_fix плагин. Это простое использование для обновления database.yml и для запуска

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

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

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

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