СЦЕНАРИЙ:
В настоящее время у меня есть приложение на Heroku, это Sinatra Application + ActiveRecord. Что в данный момент работает:
• Я могу просматривать статические страницы моего сайта
• Я могу запустить миграцию
• Я могу передать свою локальную базу данных разработки в свою базу данных Heroku (heroku db: push postgres: // localhost / dev)
• Я могу вытащить из базы данных Heroku вниз к моей локальной базе данных (heroku db: pull postgres: // localhost / dev)
ОШИБКА:
Когда я перехожу на страницу, которая делает простой запрос вроде:
@ pics = Picture.find (: все)
Я получаю эту ошибку в моем лог-файле
DEBUG -- : NoMethodError: undefined method `values' for #<PGresult:0x00000002844098>: SHOW client_min_messages
DEBUG -- : PGError: ERROR: invalid value for parameter "client_min_messages": ""
: SET client_min_messages TO ''
ActiveRecord::StatementInvalid - PGError: ERROR: invalid value for parameter "client_min_messages": ""
/app/.bundle/gems/ruby/1.9.1/gems/activerecord-3.1.3/lib/active_record/connection_adapters/postgresql_adapter.rb:592:in `async_exec'
На данный момент я не уверен, что не так, поэтому я решил войти на heroku console
и запустить эту команду, чтобы проверить, есть ли мои таблицы в БД
> heroku console
> ActiveRecord::Base.connection.tables
И я получаю похожие ошибки
ActiveRecord::StatementInvalid: PGError: ERROR: invalid value for parameter "client_min_messages": ""
: SET client_min_messages TO ''
/app/.bundle/gems/ruby/1.9.1/gems/activerecord-3.1.3/lib/active_record/connection_adapters/postgresql_adapter.rb:592:in `async_exec'
/app/.bundle/gems/ruby/1.9.1/gems/activerecord-3.1.3/lib/active_record/connection_adapters/postgresql_adapter.rb:592:in `block in execute'
/app/.bundle/gems/ruby/1.9.1/gems/activerecord-3.1.3/lib/active_record/connection_adapters/abstract_adapter.rb:244:in `block in log'
/app/.bundle/gems/ruby/1.9.1/gems/activesupport-3.1.3/lib/active_support/notifications/instrumenter.rb:21:in `instrument'
Тогда я решил попробовать это в консоли ...
> ActiveRecord::Base.establish_connection
> ActiveRecord::AdapterNotSpecified: ActiveRecord::AdapterNotSpecified
/app/.bundle/gems/ruby/1.9.1/gems/activerecord-3.1.3/lib/active_record/connection_adapters/abstract/connection_specification.rb:54:in `establish_connection'
/home/heroku_rack/lib/console.rb:158:in `block (2 levels) in <top (required)>'
/home/heroku_rack/lib/console.rb:148:in `eval'
/home/heroku_rack/lib/console.rb:148:in `_eval'
В этот момент может показаться, что у меня нет таблиц и подключения адаптера, но как это может быть, когда я могу выполнить миграцию, а также перенести и вытащить из базы данных Heroku?
ОБНОВЛЕНИЕ 1 - НЕ БОЛЬШЕ, НО БОЛЬШЕ ПРОСМОТРА
Поэтому я решил начать с нуля и повторить это снова. Кажется, я добился определенного прогресса, но я застрял. При перезапуске моего сценария я упоминал выше и добился успеха. Итак, моя база данных, миграция и данные находятся в БД. Но мое приложение все еще не может подключиться к БД. Но что странно, так это мое консольное взаимодействие.
> heroku console
> ActiveRecord::Base.connection_config
> {:adapter=>"postgresql", :database=>"1e2e12e21e", :username=>"1e2e12e21e", :password=>"i2j3i23joo12", :host=>"1e2-12e-2e1212-e2e2e1.compute-1.amazonaws.com", :port=>5432, :encoding=>"unicode"}
ПРИМЕЧАНИЕ: я заменил реальные детали на эти фальшивые вещи только для иллюстрации
> ActiveRecord::Base.connection_handler
> #<ActiveRecord::ConnectionAdapters::ConnectionHandler:0x00000002f8a578 @connection_pools={"….
ПРИМЕЧАНИЕ. Это действительно длинная строка, но она имеет содержание
> ActiveRecord::Base.connected?
> false
На данный момент я действительно не понимаю? Я не понимаю, как я могу продолжать выполнять миграцию БД, сохранять данные и извлекать данные, входить в консоль Heroku, чтобы посмотреть мои connection_config
данные, НО, когда я запускаю внутреннюю ошибку сервера моего приложения. И когда я запускаю ActiveRecord::Base.connection.tables
в heroku console
, я получаю ActiveRecord::StatementInvalid: PGError: ERROR: invalid value for parameter "client_min_messages": ""
Есть мысли о том, что я могу делать неправильно?
ФИНАЛЬНОЕ ОБНОВЛЕНИЕ
Вот в чем проблема:
Поддержка Heroku любезно указала мне на известную проблему с activerecord 3.1.3. Это ошибка, которая должна быть исправлена в будущих обновлениях: https://github.com/rails/rails/commit/92a3c487bb0d125c437e53a7f45c31fcca97f2d9
Как решить проблему:
Я решил использовать намного более низкую версию activerecord в моем gemfile gem "activerecord", "~> 3.0.9
, и мой сайт работает без проблем.
Почему я никогда не пробовал это, прежде чем я не знаю. Я надеюсь, что этот пост кто-нибудь еще.