use*_*511 1 postgresql heroku ruby-on-rails-3
我已经在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'
Run Code Online (Sandbox Code Playgroud)
特别是在这一行:
@pictures = Picture.find(:all, :conditions => [ 'gallery_url_id = ?', @gallery.url_id ], :order => "`order` ASC")
Run Code Online (Sandbox Code Playgroud)
注意:order是数据库字段,而不是SQL调用或引用.所以不要告诉我我正在做两个订单.那太傻了.除非以某种方式解析它.哪个也很傻.
我知道在本地测试中使用SQLite和在生产环境中使用PostgreSQL(pg)是一个问题.我的问题是我需要做些什么来解决这个问题?是否由于我在find中调用的标志只支持SQLite而不支持PostgreSQL?
引用标识符的反引号是SQLite也支持的MySQL主义.用于引用标识符的标准语法(PostgreSQL使用)是使用双引号:
:order => '"order" ASC'
Run Code Online (Sandbox Code Playgroud)
我建议你尽快做两件事:
"order"列的名称更改为未保留的列.第二点非常重要.数据库可移植性是一个神话,数据库之间存在很多细微差别,编写在多个数据库中工作相同的代码很困难,这意味着编写自己的可移植层(不,ActiveRecord不是可移植层).这个小的引用问题可能是许多小问题中的第一个.
| 归档时间: |
|
| 查看次数: |
318 次 |
| 最近记录: |