PG :: SyntaxError:错误:在Rails中的生产模式

时间:2014-01-08 19:16:56

标签: ruby-on-rails postgresql activerecord heroku

我正在构建一个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]:  

这可能是什么原因,因为在开发模式下运行顺利?

可能出现以下警告原因吗?

  

[已弃用] I18n.enforce_available_locales默认为true   未来。如果您真的想跳过您的语言环境验证   可以设置I18n.enforce_available_locales = false以避免此消息。

2 个答案:

答案 0 :(得分:3)

在生产中使用PostgreSQL数据库时使用MySQL数据库进行开发是个坏主意(即Heroku只使用Postgres,除非你使用添加)。

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

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

请参阅Heroku的建议:

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

答案 1 :(得分:1)

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

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