Heroku Postgres ошибка: PGError: ошибка: отношение "организации" не существует (ActiveRecord:: StatementInvalid)
У меня проблема с развертыванием моего приложения Rails в Heroku, где эта ошибка возникает при попытке доступа к приложению:
PGError: ERROR: отношение "организации" не существует (ActiveRecord::StatementInvalid)
SELECT a.attname, format_type(a.atttypid, a.atttypmod), d.adsrc, a.attnotnull
FROM pg_attribute a LEFT JOIN pg_attrdef d
ON a.attrelid = d.adrelid AND a.attnum = d.adnum
WHERE a.attrelid = '"organizations"'::regclass
AND a.attnum > 0 AND NOT a.attisdropped
ORDER BY a.attnum
У кого-нибудь есть идеи? Это впервые для меня, особенно потому, что я работал с Heroku в течение года в других приложениях и не видел ничего подобного. Конечно, все работает на локальном SQLite.
13 ответов
У меня была та же проблема. Для ее решения проще сбросить базу данных.
- heroku rake db: reset ("heroku run rake db: reset", если вы находитесь на кедре)
- heroku rake db: migrate ("heroku run rake db: migrate", если вы находитесь на cedar)
затем миграция была успешно выполнена для моего случая:)
хотя это хорошее решение в этом контексте, не делайте этого на производстве. Он удалит все записи из вашего база данных
согласно моему опыту (Rails 3.1, SEDAR stack) после запуска pg:reset
и db:migrate
возможно, вам придется запустить heroku restart
.
моя версия heroku:
heroku --version
#=> heroku-gem/2.29.0 (x86_64-linux) ruby/1.9.3
чтобы исправить это, просто откройте терминал и запустите:
heroku pg:reset DATABASE --confirm YOUR_APP_NAME
heroku run rake db:setup
heroku restart
heroku open
в моем случае мне также пришлось уничтожить и воссоздать мое приложение. Я запустил rake db: migrate с файлом миграции, не зафиксированным, и по какой-то причине PG:reset не работал.
вы используете devise? У меня была эта точная проблема при обновлении до 2.0 - вы должны вручную изменить файл миграции.
https://github.com/plataformatec/devise/wiki/How-To:-Upgrade-to-Devise-2.0-migration-schema-style
по-видимому, удаление всего моего приложения, а затем повторное развертывание с нуля исправлено. Я понятия не имею, в чем была проблема.
- В Heroku Кедр
- рельсы 3.2
- ActiceScaffold
все работает нормально локально на SQLite, но получить ту же ошибку PG на Heroku. Оказывается, ActiveScaffold каким-то образом предотвращает толчок Heroku успешный запуск задач rake из-за ошибки, подобной приведенной выше. Таким образом, вы получаете кэш 22, где вы получаете ту же ошибку, если пытаетесь запустить heroku rake db: миграция или аналогичные.
теперь исправления:
-
прокомментировать блоки кода, аналогичные следующим из все контроллеры, использующие "active_scaffold":
active_scaffold :<model_name> do |conf| end
- Commit, нажмите на heroku
heroku run rake db:migrate
- убедитесь, что все хорошо бег!--2--> а затем скажите, что создаете модель и сохраняете ее.
- теперь верните изменения (т. е. верните
active_scaffold
блок выше) - commit, нажмите на heroku
- вы находитесь в бизнесе!
Я держу свою локальную настройку как можно ближе к производству, включая использование базы данных postgresql, поэтому у меня была эта проблема на моей локальной машине. Я все равно не могу удалить свою производственную базу данных. Оказалось, что моя проблема была только в тесте, поэтому я использовал: rake db:test: prepare, чтобы исправить это.
у меня была аналогичная проблема и побежал heroku run rake db:reset
и heroku run rake db:migrate
чтобы устранить проблему. Я думаю, что я просто не правильной миграции решить проблему.
может быть много причин для этой ошибки. Однако для моего приложения Проблема заключалась в том, что я не вышел из приложения до запуска миграции (?). Итак, идем по этому пути.:
http://name_of_my_app.herokuapp.com/logout
Исправлена проблема для меня.
после нескольких часов просеивания ответа я понял, что когда вы указываете
rails new MYAPP -database POSTGRESQL
это меняет .gitignore файл, игнорируя весь /db/ directory
, поэтому моя база данных никогда не подталкивалась к heroku. Удалите его с осторожностью или, по крайней мере, не имейте своего имени пользователя и пароля там, где вы нажимаете.