Рельсы 4:Среда разработки Capistrano вместо производства?
-
21-12-2019 - |
Вопрос
Я развертываю производственную среду моего приложения 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
.