2009-11-23 2 views
2

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

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

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

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

Установить камень Heroku: Судо камень установить herokuCreate новый репозиторий для вашего приложения (если вы еще не сделали):

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 открыт

Вот является. . $ heroku logs, если это помогает:

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) 
+1

Работает ли он локально? – cloudhead

+0

Он делает, но я думаю, проблема связана с проблемой миграции. См. Мой комментарий ниже от майка h. – bgadoci

ответ

9

У вас есть миграция для всех ваших столов.

Вы могли бы сделать Heroku грабли DB: схемы: нагрузка просто загрузить свежий Schema

+0

на самом деле я не ... и это объясняло бы проблему. Я добавил post_id, просто создав столбец, используя Base.app, который является интерфейсом базы данных для sqlite3. Это так же просто, как просто делать скрипт/генерировать миграцию ... и вызывать столбцы одинаково? – bgadoci

+0

Чтобы избежать таких ошибок, вы можете просто использовать миграции для добавления этих столбцов в первую очередь, например. 'script/generate migration AddPostIdToVotes post_id: integer'. –

2

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

+0

Я собираюсь обновить вопрос тем, что он выплевывает. Не могу понять это. Поддержка в Heroku пыталась помочь, но пока не сделала большой работы. Баскально он велел мне посмотреть журналы, потом он сказал мне, что в моей таблице голосов нет столбец post_id, а затем сделать герою rake db: migrate, пока ничего не получилось. Я также попробовал перезагрузить сервер, как вы упомянули, но все еще не работает. – bgadoci

+1

Это, как правило, является причиной этой ошибки для меня. Heroku не перезагружается после миграции, поэтому даже если в таблице есть столбец, на который вы ссылаетесь в коде, он не будет загружен Rails до перезагрузки. –

4

Важным направлением в журналах является:

PGError: ERROR: column votes.post_id does not exist

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

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

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

+0

Вы также можете 'rake db: drop' уничтожить его, а затем' rake db: create' воссоздать пустую базу данных с правильным именем. Вам нужно сделать это для баз данных, отличных от sqlite. – nfm

2

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

Смежные вопросы