Проблема с развертыванием в Heroku - PullRequest
0 голосов
/ 05 марта 2012

Привет! Я пытался развернуть свое приложение ruby ​​on rails в Heroku в течение последних нескольких дней, и я получаю эту ошибку. "Извините, но что-то пошло не так. Мы получили уведомление об этой проблеме, и мыпосмотрим на это в ближайшее время ".Несмотря на то, что я следовал руководству 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?

Ответы [ 3 ]

2 голосов
/ 06 марта 2012

Давайте внимательно посмотрим на вашу ошибку:

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...).

Есть и другие различия между SQLite и PostgreSQL.ActiveRecord не может защитить вас от всех различий между базами данных, поэтому вы всегда должны разрабатывать, тестировать и развертывать, используя один и тот же стек (вплоть до версии базы данных).

0 голосов
/ 05 марта 2012
  • Ваш git status чист?
  • Если это так, вы в последнее время git push heroku master?

Убедитесь, что ваш код зафиксирован и передан.Тогда вы захотите запустить миграцию.

0 голосов
/ 05 марта 2012

Похоже, вам может понадобиться мигрировать.

heroku run rake db:migrate
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...