Вопрос

Я развертываю производственную среду моего приложения Ruby on Rails с драгоценным камнем capistrano на виртуальном частном сервере.Я запускаю следующую команду для развертывания:

bundle exec cap production deploy

Кажется, все работает хорошо, если я не попытаюсь проверить, в какой среде работает моя текущая производственная версия.

Один из способов проверить это — запустить:

rails console
Rails.env

Я получаю ответ «развитие», что весьма пугает.

Во время другого теста:когда я запускаю следующее в моей текущей версии:

rails db

Я получаю сообщение об ошибке, в котором говорится, что mydatabase_development не создан.

Кажется, мое приложение работает хорошо, но я не знаю, вызовет ли это серьезные проблемы в дальнейшем.Прежде всего:Есть ли способ определить, действительно ли моя работающая копия находится в стадии разработки?Во-вторых:Учитывая, что у меня возникла проблема, как мне настроить capistrano для развертывания производственной среды?

Это было полезно?

Решение

Имейте в виду, что rails console действует в текущей обстановке так, как это диктуется RAILS_ENV или RACK_ENV в вашей среде.Если вы не настроили это явно на своем сервере, то, вероятно, по умолчанию будет установлено значение development.

Один из способов исправить это — принудительно включить его в свой .bash_profile или любой профиль оболочки, который вы используете.Например:

export RAILS_ENV=production

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

Обратите внимание: вы даже не сможете запустить режим разработки на своем рабочем сервере, поскольку в нем не должно быть записи с таким именем. config/database.yml.Лучшей практикой является хранение config/database.yml только на рабочем сервере и переместите его во время развертывания Capistrano.

Добавьте это в свой config/deploy.rb:

set :linked_files, %w[
  config/database.yml
]

Затем вы создаете конфигурацию только для производства в shared/config/database.yml который будет привязан к месту при развертывании.Обязательно исключите config/database.yml из вашей системы контроля версий, чтобы он не был развернут.

Причина, по которой ваш сайт, вероятно, в порядке, заключается в том, что программа запуска, такая как Passenger, автоматически устанавливает RACK_ENV к production если не настроено иное.Однако это не влияет на вашу оболочку, которая по умолчанию имеет значение development.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top