2011-06-22 22 views
1

因为我想为我的Rails应用程序使用PostgreSQL,所以我为它设置了Rails。然而,当Rails正在清理和重新填充测试数据库时,我似乎总是得到关系不存在以及许多其他相关的错误,而我没有遇到过MySQL或SQLite。使用2个Rails数据库:MySQL或SQLite测试和Developmnet和PostgreSQL生产

那么可以设置它?用于测试或开发的MySQL和用于生产的PostgreSQL?

如果是这样,在不同的数据库上维护相同的模式会带来多大的麻烦?

+1

考虑到我们在这里得到了多少关于“我在SQLite上开发我的应用程序,然后将其移植到PostgreSQL上的应用程序,现在它不再工作”的问题,我认为这不是一个好主意,测试和生产。 –

回答

5

跨多个数据库维护架构不会有太大问题。您的问题将在其他地区:

  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

我面临的关键问题是使用不同的系统进行开发/测试和部署会增加错误并使其很难找到这些错误。当有另一个答案时,你也会将这个差异归咎于错误。

将变量最小化并使事物保持均匀总是比较好的。

1

这是可能的,当然。您可以使用database.yml指定您希望用于不同环境的任何类型的数据库。

这就是说,这是一个坏主意。即使将ActiveRecord作为您和数据库之间的抽象层使用,MySQL和SQLite以及Postgres之间也会存在差异,其中一些会很微妙,并且他们咬你的正确时机是在开发和测试环境中,不生产。

一个更好的主意是找出并解决你在开发/测试模式下从Postgres获得的错误。 Postgres是一个伟大的数据库 - 这将是值得的努力。

相关问题