【问题标题】:Use 2 Databases for Rails: MySQL or SQLite for Testing and Developmnet and PostgreSQL for Production为 Rails 使用 2 个数据库:用于测试和开发的 MySQL 或 SQLite 以及用于生产的 PostgreSQL
【发布时间】:2011-06-22 05:27:15
【问题描述】:

因为我想将 PostgreSQL 用于我的 rails 应用程序,所以我为 Rails 设置了它。但是,当 Rails 清理和重新填充测试数据库时,我似乎总是得到关系不存在,以及许多其他相关的错误,这是我在 MySQL 或 SQLite 中没有遇到的。

那么可以设置吗? MySQL 用于测试或开发,PostgreSQL 用于生产?

如果是,那么在不同的数据库中维护相同的架构会很麻烦吗?

【问题讨论】:

  • 考虑到我们在这里遇到了多少关于“我在 SQLite 上开发我的应用程序,然后将其移至 PostgreSQL 上的生产环境,现在它不再工作”的问题,我会说这不是一个好主意拥有不同的测试和生产环境。

标签: mysql ruby-on-rails postgresql


【解决方案1】:

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

  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 之上进行开发。并且使用相同的版本。

【讨论】:

    【解决方案2】:

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

    最好尽量减少变量并保持同质化。

    【讨论】:

      【解决方案3】:

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

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

      一个更好的主意是找出并修复您在开发/测试模式下从 Postgres 获得的错误。 Postgres 是一个很棒的数据库 - 值得付出努力。

      【讨论】:

        猜你喜欢
        • 2019-07-14
        • 1970-01-01
        • 2011-01-19
        • 1970-01-01
        • 2013-05-15
        • 2011-02-12
        • 2021-11-07
        • 2013-06-28
        • 2010-11-27
        相关资源
        最近更新 更多