Heroku, Проблема/Вопрос

Меня направили в Heroku для хостинга Ruby on Rails, и пока я думаю, что мне это действительно понравится. Просто интересно, может ли кто-нибудь там помочь мне понять, что не так.

Я следую инструкциям по созданию приложения на этом сайте, создаю и фиксирую git, отправляю код, и он появляется по адресу http://mylifebattlecry.heroku.com (хотя большая часть того, что я сделал, находится в пути /posts/). 500.html ошибка и по сути все выключается. Не могу даже вернуться на страницу, на которую вошел пост.

Мне кажется, что-то не так с настройкой базы данных. Я сделал, как они предложили, включая ...$ heroku rake db:migrate, и ничего.

Просто интересно, знает ли кто-нибудь, что я делаю неправильно. Вот инструкции, которые они дают для справки:

Установите гем Heroku: sudo gem install heroku Создайте новый репозиторий git для своего приложения (если вы еще этого не сделали):

cd myapp
git init && git add . && git commit -m "first commit"

Создайте новое приложение Heroku:

heroku create
Created http://sharp-autumn-42.com/ | [email protected]:sharp-autumn-42.git
Git remote heroku added

ПРИМЕЧАНИЕ. Имя приложения создается автоматически; не волнуйтесь, вы можете переименовать его в любое время.

Разверните свой код:

git push heroku master

Запустите миграции (или другие задачи начальной загрузки):

heroku rake db:migrate

Откройте развернутое приложение в браузере: heroku open

Вот журналы ..$ heroku, если это поможет:

brandon-gadocis-macbook-pro:mylifebattlecry bgadoci$ heroku logs -app mylifebattlecry
==> dyno-629271.log <==

==> production.log <==
# Logfile created on Sun Nov 22 18:26:06 -0800 2009

Processing PostsController#index (for 99.7.50.140 at 2009-11-22 18:26:07) [GET]
Rendering template within layouts/posts
Rendering posts/index

ActionView::TemplateError (PGError: ERROR:  column votes.post_id does not exist
LINE 1: SELECT count(*) AS count_all FROM "votes" WHERE ("votes".pos...
                                                         ^
: SELECT count(*) AS count_all FROM "votes" WHERE ("votes".post_id = 1) ) on line #58 of app/views/posts/index.html.erb:
55:                 </div>
56:             <div id="vote"><br/>
57:                 <div id="votes">
58:                     <%= pluralize post.votes.count, 'Person' %>  like the above BattleCry. <br/>
59:                 </div>
60:                 <%= link_to "Comments (#{post.comments.count})", post %>
61:             </div>

    app/views/posts/index.html.erb:58
    app/views/posts/index.html.erb:51
    app/views/posts/index.html.erb:45:in `each'
    app/views/posts/index.html.erb:45
    app/controllers/posts_controller.rb:11:in `index'
    /home/heroku_rack/lib/static_assets.rb:9:in `call'
    /home/heroku_rack/lib/last_access.rb:25:in `call'
    /home/heroku_rack/lib/date_header.rb:14:in `call'
    thin (1.0.1) lib/thin/connection.rb:80:in `pre_process'
    thin (1.0.1) lib/thin/connection.rb:78:in `catch'
    thin (1.0.1) lib/thin/connection.rb:78:in `pre_process'
    thin (1.0.1) lib/thin/connection.rb:57:in `process'
    thin (1.0.1) lib/thin/connection.rb:42:in `receive_data'
    eventmachine (0.12.6) lib/eventmachine.rb:240:in `run_machine'
    eventmachine (0.12.6) lib/eventmachine.rb:240:in `run'
    thin (1.0.1) lib/thin/backends/base.rb:57:in `start'
    thin (1.0.1) lib/thin/server.rb:150:in `start'
    thin (1.0.1) lib/thin/controllers/controller.rb:80:in `start'
    thin (1.0.1) lib/thin/runner.rb:173:in `send'
    thin (1.0.1) lib/thin/runner.rb:173:in `run_command'
    thin (1.0.1) lib/thin/runner.rb:139:in `run!'
    thin (1.0.1) bin/thin:6
    /usr/local/bin/thin:20:in `load'
    /usr/local/bin/thin:20

Rendering /disk1/home/slugs/88382_601a216_9803/mnt/public/500.html (500 Internal Server Error)

person bgadoci    schedule 23.11.2009    source источник
comment
Это так, но я думаю, что проблема связана с миграцией. Смотрите мой комментарий ниже от Майка Х.   -  person bgadoci    schedule 23.11.2009


Ответы (4)


Вы уверены, что у вас есть миграции для всех ваших таблиц.

Вы можете сделать heroku rake db:schema:load, чтобы просто загрузить новую схему

person Mike H    schedule 23.11.2009
comment
на самом деле я не ... и это объяснило бы проблему. Я добавил post_id, просто создав столбец с помощью Base.app, который является интерфейсом базы данных для sqlite3. Это так же просто, как просто выполнить скрипт/генерировать миграцию... и назвать столбцы одинаковыми? - person bgadoci; 23.11.2009
comment
Чтобы избежать таких ошибок, вы можете просто использовать миграции, чтобы добавить эти столбцы в первую очередь, например. script/generate migration AddPostIdToVotes post_id:integer. - person Tomas Markauskas; 02.01.2010

Важная строка в логах:

PGError: ERROR: column votes.post_id does not exist

Это означает, что база данных на Heroku не имеет схемы, которую пытается использовать ваше приложение.

Убедитесь, что у вас есть миграция, которая создает таблицы так, как вы хотите, зафиксируйте изменения, затем запустите: heroku rake db:migrate и все готово.

Для тестирования начните с чистой локальной базы данных (если используете sqlite, просто удалите db/development.sqlite3) и запустите rake db:migrate локально. Если он работает на вашем локальном компьютере, он должен работать и на Heroku.

person teich    schedule 23.11.2009
comment
Вы также можете rake db:drop уничтожить ее, а затем rake db:create воссоздать пустую базу данных с правильным именем. Вам нужно сделать это для баз данных, отличных от sqlite. - person nfm; 02.01.2010

В этом нет ничего плохого, вы можете попробовать heroku restart перезапустить приложение, но лучше всего сделать heroku logs сразу после загрузки проблемной страницы и посмотреть, что оно вам скажет.

person cloudhead    schedule 23.11.2009
comment
Я собираюсь обновить вопрос тем, что он выплевывает. Не могу понять. Служба поддержки Heroku пыталась помочь, но пока не очень хорошо. По сути, он сказал мне посмотреть журналы, затем он сказал мне, что в моей таблице голосования нет столбца post_id, а затем сделать heroku rake db: migrate, пока ничего не сработало. Я также попытался перезапустить сервер, как вы упомянули, но все равно не работает. - person bgadoci; 23.11.2009
comment
Это обычно является причиной этой ошибки для меня. Heroku не перезапускается после миграции, поэтому даже если в вашей таблице есть столбец, на который вы ссылаетесь в своем коде, Rails не подхватит его до тех пор, пока вы не перезапустите. - person Luke Francl; 23.11.2009

У меня была аналогичная проблема. heroku restart решил проблему, когда heroku rake db:migrate не брал. Кроме того, вы можете проверить свое приложение через heroku console (./script/console в удаленном приложении).

person enure    schedule 02.01.2010