Используйте 2 базы данных для Rails: MySQL или SQLite для тестирования и Developmnet и PostgreSQL для производства - PullRequest
1 голос
/ 22 июня 2011

Поскольку я хотел использовать PostgreSQL для моего приложения rails, я настроил его для Rails. Тем не менее, мне всегда кажется, что связь не существует, и много других связанных ошибок, когда Rails очищает и заново заполняет тестовую базу данных, с которой я не сталкиваюсь с MySQL или SQLite.

Так можно ли это настроить? MySQL для тестирования или разработки и PostgreSQL для производства?

Если это так, будет ли хлопот поддерживать одну и ту же схему в разных базах данных?

Ответы [ 3 ]

5 голосов
/ 22 июня 2011

Поддержка схемы в нескольких базах данных не будет большой проблемой.Ваша проблема будет в других областях:

  1. MySQL и SQLite довольно слабы с их преобразованиями типов, PostgreSQL строг.
  2. MySQL часто молча обрезает строки, тогда как PostgreSQL будет жаловаться.
  3. MySQL и SQLite позволят вам иметь в вашем SELECT вещи, которых нет в GROUP BY, но PostgreSQL будет жаловаться.
  4. Логические значения обрабатываются по-разному во всех трех:
    • PostgreSQL использует литералы 't' и 'f' (и несколько других) для логических значений.
    • MySQL использует 1 и 0.
    • SQLite использует 1 и 0, но ActiveRecord использует 't' и 'f' в любом случае, но это работает, потому что SQLite рассматривает все как строку.

Это некоторые из проблем, которые возникают у меня в голове, но есть и другие.Ни один ORM не может защитить вас от различий и недоразумений в базе данных.

Потратьте некоторое время на поиск таких вещей, как «все работало нормально, пока я не развернул его в Heroku», или даже просто тегов «[heroku] [postgresql]» и вы »Вы найдете множество примеров людей, которые столкнулись с проблемами при разработке поверх MySQL или SQLite, но при развертывании в PostgreSQL.

Краткий ответ: не делайте этого, разрабатывайте поверх PostgreSQL, если вы планируетеразвернуть на PostgreSQL.И используйте ту же версию.

3 голосов
/ 22 июня 2011

Важнейшая проблема для меня - использование разных систем для разработки / тестирования и развертывания увеличит количество ошибок и усложнит их поиск.Также вы будете обвинять ошибки в этой разнице, когда есть другой ответ.

Всегда лучше минимизировать ваши переменные и сохранять однородность.

1 голос
/ 22 июня 2011

Возможно, конечно.Вы можете использовать database.yml для указания любых типов баз данных, которые вы хотите использовать в различных средах.

Тем не менее, это плохая идея.Даже если ActiveRecord будет использоваться в качестве уровня абстракции между вами и вашей базой данных, между MySQL, SQLite и Postgres будут различия, и некоторые из них будут неуловимыми, и правильное время для вас кусать в средах разработки и тестированияне производство.

Намного лучше было бы выяснить и исправить ошибки, которые вы получаете от Postgres в режиме разработки / тестирования.Postgres - отличная база данных - она ​​того стоит.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...