您好我过去几天一直尝试将我的ruby部署在rails应用程序上,并且我收到此错误“我们很抱歉,但出了点问题。我们已经收到有关此问题的通知,我们将会不久看看它“。即使我遵循了Heroku指南,我也会检查Heroku日志,这就是它所说的:
2012-03-05T18:59:41+00:00 app[web.1]: Processing by StoreController#index as HTML
2012-03-05T18:59:41+00:00 app[web.1]: Rendered store/index.html.erb within layouts/application (66.7ms)
2012-03-05T18:59:41+00:00 app[web.1]: Completed 500 Internal Server Error in 164ms
2012-03-05T18:59:41+00:00 app[web.1]:
2012-03-05T18:59:41+00:00 app[web.1]: ActionView::Template::Error (PG::Error: ERROR: column "name" does not exist
2012-03-05T18:59:41+00:00 app[web.1]: LINE 1: SELECT "products".* FROM "products" ORDER BY Name
2012-03-05T18:59:41+00:00 app[web.1]: ^
2012-03-05T18:59:41+00:00 app[web.1]: : SELECT "products".* FROM "products" ORDER BY Name):
2012-03-05T18:59:41+00:00 app[web.1]: 2: <p id= "notice"><%= notice %></p>
2012-03-05T18:59:41+00:00 app[web.1]: 3: <% end %>
2012-03-05T18:59:41+00:00 app[web.1]: 8:
2012-03-05T18:59:41+00:00 app[web.1]: 6: <div class ="entry">
2012-03-05T18:59:41+00:00 app[web.1]: app/views/store/index.html.erb:5:in `_app_views_store_index_html_erb___635623125359494649_35532040'
2012-03-05T18:59:41+00:00 app[web.1]: 7: <div class="img">
2012-03-05T18:59:41+00:00 app[web.1]: 5: <% @products.each do |product| %>
2012-03-05T18:59:41+00:00 app[web.1]:
2012-03-05T18:59:41+00:00 app[web.1]: 4:
2012-03-05T18:59:41+00:00 app[web.1]:
2012-03-05T18:59:41+00:00 app[web.1]: cache: [GET /] miss
可能是什么问题,因为它在本地工作正常?可能是因为我使用SQLite3作为我的测试和开发数据库,但对于Heroku它使用PostgreSQL吗?
答案 0 :(得分:2)
让我们仔细看看你的错误:
ActionView::Template::Error (PG::Error: ERROR: column "name" does not exist
LINE 1: SELECT "products".* FROM "products" ORDER BY Name
^
大写但不加引号的Name
非常可疑; SQL标识符不区分大小写,除非您引用它们(它们应该被标准化为大写,但PostgreSQL标准化为小写)。所以,这些表都是一样的:
create table t (name varchar(255));
create table t (Name varchar(255));
create table t (nAmE varchar(255));
create table t (NAME varchar(255));
但这些都不同:
create table t ("name" varchar(255));
create table t ("Name" varchar(255));
create table t ("nAmE" varchar(255));
create table t ("NAME" varchar(255));
我猜您已使用"Name"
列而不是name
列创建了表格。我建议使用小写name
列重新创建表格;或者,您可以在致电order
时引用该列:
Model.where(...).order('"Name"')
但实际上,使用小写列名称可以让您的生活更轻松,维护代码的人将会有更好的回忆。
你在其他地方的评论中注意到你正在开发SQLite但是部署到PostgreSQL。 SQLite似乎忽略了列名中的大小写,即使它们被引用:
sqlite> create table t ("Name" text);
sqlite> insert into t values ('a');
sqlite> select * from t order by name;
Name
a
所以一切都可以在SQLite中正常运行。但是,PostgreSQL会注意引用标识符的情况(正如SQL规范所说的那样),因此如果在创建列时引用了列,则ORDER BY Name
将失败(例如create table t ("Name" varchar...
)。< / p>
SQLite和PostgreSQL之间还存在其他差异。 ActiveRecord无法保护您免受数据库之间的所有差异的影响,因此您应始终使用相同的堆栈(一直到数据库版本)进行开发,测试和部署。
答案 1 :(得分:-1)
看起来您可能需要迁移。
heroku run rake db:migrate
答案 2 :(得分:-1)
git status
干净吗? git push heroku master
吗?确保您的代码已提交并推送。然后,您将要运行迁移。