【问题标题】:PG::SyntaxError: ERROR: At Production Mode in RailsPG::SyntaxError: 错误:在 Rails 的生产模式下
【发布时间】:2014-01-08 19:16:55
【问题描述】:

我正在构建一个 Web 应用程序,当它在生产模式 @Heroku 上运行并尝试执行以下查询时崩溃,而在开发模式下一切运行顺利。

查询如下:

report_id = ReportsNum.group("report_id").
                    having("GROUP_CONCAT(patent_num ORDER BY patent_num ASC SEPARATOR ',') = ?",patents_list).
                    order(created_at: :desc).
                    pluck(:report_id).
                    first

这是我收到的异常消息:

2014-01-08T18:46:48.316625+00:00 app[web.1]: PG::SyntaxError: ERROR:  syntax error at or near "SEPARATOR"
2014-01-08T18:46:48.316633+00:00 app[web.1]:                                                               ^
2014-01-08T18:46:48.316637+00:00 app[web.1]: : SELECT "report_patent_nums"."report_id" FROM "report_patent_nums"  GROUP BY report_id HAVING GROUP_CONCAT(patent_num ORDER BY patent_num ASC SEPARATOR ',') = 'AB1234567S1,AB1234567S2'  ORDER BY "report_patent_nums"."created_at" DESC
2014-01-08T18:46:48.316701+00:00 app[web.1]: LINE 1: ...G GROUP_CONCAT(patent_num ORDER BY patent_num ASC SEPARATOR ...
2014-01-08T18:46:48.316632+00:00 app[web.1]: LINE 1: ...G GROUP_CONCAT(patent_num ORDER BY patent_num ASC SEPARATOR ...
2014-01-08T18:46:48.316703+00:00 app[web.1]:  

由于在开发模式下运行平稳,这可能是什么原因?

以下警告可能是造成这种情况的原因吗?

[deprecated] I18n.enforce_available_locales 在 未来。如果您真的想跳过对您的语言环境的验证,您 可以设置 I18n.enforce_available_locales = false 来避免这个消息。

【问题讨论】:

  • 我不知道如何修复您看到的特定 Postgres 错误,但我发现有一点很有帮助的是针对您将在生产中使用的同一个数据库进行开发。您可能正在针对 SQLite 进行开发,而 Heroku 使用 Postgres,这可能会导致您描述的场景。这需要更多设置,但它会帮助您在将此类问题投入生产之前发现此类问题。
  • 您的数据库是否相同?
  • 对于开发,我们使用 mysql,如 database.yml 文件 development: adapter: mysql2 中所述。在生产模式下,我们也使用 mysql,如后面文件 production: adapter: mysql2 中所述,所以它们应该相同吗?
  • 你只能在 Heroku 上使用 postgresql。无论您在 database.yml 中指定什么,Heroku 都将使用 postgres 数据库。
  • Heroku 默认在 Postgresql 上运行

标签: ruby-on-rails postgresql activerecord heroku


【解决方案1】:

在生产环境中使用 PostgreSQL 数据库时使用 MySQL 数据库进行开发是个坏主意(即 Heroku 仅使用 Postgres,除非您使用附加组件)。

MySQL 和 Postgres 之间的 SQL 实现存在显着差异,这将导致难以解决的生产错误。

例如,我认为 Postgres 甚至没有您尝试使用的 GROUP_CONCAT 方法。

在此处查看 Heroku 的建议:

https://devcenter.heroku.com/articles/heroku-mysql

【讨论】:

    【解决方案2】:

    Postgres 没有 GROUP_CONCAT。 There is a workaround posted on Stack Overflow

    这就是您不在不同数据库上开发和部署的原因。如果您使用的是 Mac,使用 Postgres 的最简单方法是Postgres App

    【讨论】:

      猜你喜欢
      • 2012-07-21
      • 2011-07-16
      • 1970-01-01
      • 1970-01-01
      • 2018-09-06
      • 2010-09-13
      • 2021-06-22
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多