Обновление до Rails 5.2, не может загрузиться, ActiveRecord :: StatementInvalid: PG :: UndefinedTable: ERROR: отношение не существует - PullRequest
0 голосов
/ 07 ноября 2018

С новой базой данных, запущенной bundle exec rails db:structure:load или rails db:create или rails db:migrate или bin/rails db:setup throws

rails aborted!
ActiveRecord::StatementInvalid: PG::UndefinedTable: ERROR:  relation "clients" 
does not exist
LINE 8:                WHERE a.attrelid = '"clients"'::regclass
...etc                                      ^

Я был бы счастлив, просто зная, как это отладить. В какой-то момент некоторый код вызывает модель Client, но он невидим. Что может потребовать, чтобы таблица клиентов существовала до загрузки?

редактирует:

Нет миграций, нет. Приложение отлично загружается локально, где есть база данных: это происходит сначала в CI, где оно загружается с нуля.

Вот трассировка стека https://gist.github.com/EmmaB/01a9322ab66f258a5ebd6883a441251f, показывающая другую отсутствующую таблицу после того, как я закомментировал следующий код в инициализаторе Flipper:

Client::Identifiers::IDENTIFER_ID_MAPPING.each do |client_identifier, client_id|
  Flipper.register(client_identifier) do |actor|
    actor&.client_id == client_id
  end
end

Но этот код инициализатора не должен запускаться при загрузке, когда вы загружаете структуру, верно? И действительно, не работает в Rails 4.2.10 (обновление с версии 5.2).

1 Ответ

0 голосов
/ 07 ноября 2018

Обтекание вызовов модели в инициализаторах с

Rails.configuration.after_initialize do
  # Model calls 
end

загружает приложение. Инициализаторы должны вызываться раньше в процессе загрузки, чем в Rails 4. Редактировать: И действительно, вот поток https://github.com/rails/rails/issues/32870

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...