Рельсы в базе данных памяти
Могу ли я установить рельсы для использования 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.