ruby-on-rails-3 - Heroku + Rails + PostgreSQL 问题

标签 ruby-on-rails-3 postgresql heroku

我已经在 Heroku 上安装了一个在本地运行良好的应用程序(在测试中使用 sqlite3 作为数据库的 gem),当我推送到 Heroku 并尝试运行它时,我不断收到此错误:

 ActiveRecord::StatementInvalid (PG::Error: ERROR:  syntax error at or near "order"
LINE 1: ...lery_url_id = 'k19fv2mytjEb_3gCezLeRA') ORDER BY `order` ASC                                                              ^
: SELECT "pictures".* FROM "pictures"  WHERE (gallery_url_id = 'k19fv2mytjEb_3gCezLeRA') ORDER BY `order` ASC):
app/controllers/galleries_controller.rb:38:in `show'

特别是这一行:

@pictures = Picture.find(:all, :conditions => [ 'gallery_url_id = ?', @gallery.url_id ], :order => "`order` ASC")

注意:order 是一个数据库字段,而不是 SQL 调用或引用。所以不要告诉我我正在执行两个命令。那将是愚蠢的。除非以某种方式解析它。这也很愚蠢。

我了解到在本地测试中使用 SQLite 并在生产环境中使用 PostgreSQL (pg) 存在一些问题。我的问题是我需要做什么来解决这个问题?是否由于我在查找中调用的标志仅受 SQLite 而不是 PostgreSQL 支持?

最佳答案

用于引用标识符的反引号是 SQLite 也支持的 MySQL 主义。引用标识符的标准语法(PostgreSQL 使用)是使用双引号:

:order => '"order" ASC'

我建议您尽快做两件事:

  1. “order” 列的名称更改为非保留名称。
  2. 如果您计划部署到 Heroku,请安装 PostgreSQL 并使用 PostgreSQL 进行开发。您的开发堆栈应始终与您的部署堆栈完全匹配。

第二点相当重要。数据库可移植性是一个神话,数据库之间存在如此多的细微差异,以至于编写在多个数据库中工作相同的代码很困难,并且意味着编写您自己的可移植层(不,ActiveRecord 不是那个可移植层)。这个小引用问题可能是许多小问题中的第一个。

关于ruby-on-rails-3 - Heroku + Rails + PostgreSQL 问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11475459/

相关文章:

postgresql - 使用 postgres 从 jsonb 数组中删除元素

php - 如何将 HTTP 身份验证添加到基于 PHP 的 Heroku 应用程序?

php - 如何连接到在 cake php v3.x 的 salesforce 中创建为自定义字段的 Heroku connect 表

mysql - 如何使用 Tire 从 Elasticsearch 索引中获取数据而不访问数据库

ruby-on-rails - rails 3 : What CSS styles are expected by Rails?

ruby-on-rails - rails 3 : Drop a table using migration

html - 将样式表传递给 heroku

css - Phusion Passenger 会使我的 CSS 渲染与 Rails 3.2 中的本地服务器开发不同吗?

sql - 在动态sql中生成序列新值

postgresql - 使用事务和 squirrel 进行 Golang postgresql 查询