Заполнение не удается, когда инициализатор запускается

В последнее время я использую следующий инициализатор в проекте Rails 5:

Инициализаторы /initialize_configs.rb

$current_city = Config.first.city

Но после нескольких изменений мне пришлось использовать rails db:migrate и rails db:seed, а затем я получил эту ошибку. До этого момента мое приложение работало хорошо.

Config - это таблица, состоящая только из одной строки, в которой я сохраняю конфигурации для каждого VPS, а $current_city также является переменной, имеющейся у каждого VPS.

Проблема в том, что эта ошибка появляется, когда я делаю rails db:seed, и поэтому я не могу загрузить свою первоначальную конфигурацию.

Как я мог решить проблему, все еще загружая эту начальную далту?

введите описание изображения здесь

1 ответ

Решение

Когда ты бежишь rails db:seed тогда Rails инициализируется, иначе вы не смогли бы использовать модели Rails в этом файле. И это является причиной вашей проблемы. Потому что в этом процессе инициализации Config.first.city должен произойти сбой, потому что в базе данных еще нет данных.

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

Тем не менее, в настоящее время у вас есть два варианта:

  1. Не используйте начальный файл Rails для заполнения базы данных. Вместо этого используйте, например, простой SQL. Или же
  2. изменить код в инициализаторе, чтобы иметь возможность обрабатывать ситуации, в которых Config.first пусто Например, используя разумные значения по умолчанию.
Другие вопросы по тегам