2016-07-19 3 views
0

Я создал приложение с Rails, которое царапает твиттер для телефонных номеров. Это на герою, и он работал нормально, пока я не добавил модель для разных гостей, использующих приложение. Теперь, когда я пытаюсь выполнить db: migrate, db: reset или db: create, я получаю сообщение об ошибке «ActiveRecord :: StatementInvalid: PG :: UndefinedTable: ERROR: отношение« гости »не существует». Я прочитал каждую статью переполнения стека по этой теме, но каждое решение использует команды, которые я не могу запустить, не получая ошибку.Bizarre PG :: UndefinedTable Ошибка с Rails-приложением на Heroku

Все с программой отлично работало локально. Я мог бы мигрировать в базу данных, отбрасывать и воссоздавать ее, если мне это нужно, и использовать приложение для его полной функциональности. Проблема заключалась в переходе на базу данных postgres Heroku. Я сразу же перебрался в Heroku без ошибок, но когда я попытался запустить приложение онлайн, он сказал, что не может получить доступ к своей базе данных. Я пошел, чтобы перенести изменения моей базы данных на Heroku, и когда я это сделал, я получил ошибку. Я попытался сбросить базу данных Heroku и снова выполнить миграцию, но я получил ту же ошибку при миграции.

Гость - это модель, которую я создал, когда я добавил вход в приложение. Пользователи - это учетные записи twitter, и Гости - это люди, которые вошли в систему с помощью скребка. Пользователи принадлежат гостям через отношение «has_many» «принадлежит».

Кроме того, после получения ошибки с heroku, когда я пытаюсь перейти к моей локальной базе данных, я получаю сообщение об ошибке. Как я уже сказал, я не могу db: reset, db: create или db: больше переносить локально. Я могу только db: drop.

Я использую postgres как на местном уровне, так и на производстве. Мои таблицы выглядят хорошо. Я проверил метки времени в своих файлах миграции и сначала попытался создать гостей и создать пользователей. Вот скриншот моего schema file.

Это скриншот моего error message.

Любая помощь очень ценится. Я застрял на этом неделю.

+0

Есть ли трассировка стека с этой ошибкой? Похоже, что-то пытается создать экземпляр 'Guest' или искать структуру класса Guest, пока приложение настраивается для запуска' db: migrate'. –

+0

Что такое трассировка стека? И как бы я нашел это? –

+0

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

ответ

1

Я понял это

Благодаря тонну, мю слишком коротка. Я думаю, моя проблема в том, что я ссылался на мой гостевой класс в моем файле инициализации. Я переместил этот бит кода на метод контроллера, который был уместен, нажал на герою, и теперь все работает нормально.

+0

Право. Если вы попробуете 'Guest.where (...)', тогда AR запросит базу данных, чтобы увидеть, как выглядит «Гость», это забавный поисковый запрос ':: regclass', который вы видели в трассировке стека. Но если в базе данных нет таблицы 'guest' (т. Е. Миграция еще не запущена), то при нажатии кнопки' '' guest '' :: regclass' произойдет сбой, и вы получите «PG :: UndefinedTable» ошибка. Инициализаторы не должны ссылаться на базу данных: это приводит к этим циклам зависимостей. –

0

Ваш Postgres пользователь оленья кожа имеет разрешения на создание или отбрасывание базы данных, необходимо использовать стр: обнуление

heroku pg:reset DATABASE_URL 

This, что я следовал, и она работала для меня.

+0

Я пробовал это, и это ничего не меняет –