Elastic Beanstalk, Rails 5 и Passenger: разочарование в Rails.env - PullRequest
0 голосов
/ 21 сентября 2018

У меня есть стек в Elastic Beanstalk, на котором запущен образ «Пассажир с Ruby 2.5, работающий на 64-битной версии Amazon Linux / 2.8.3».Rails это v5.2.1.Желание сделать это промежуточной средой, то есть, чтобы Rails.env возвращал 'staging' и запускался из конфигурации staging.rb.Проблема в том, что, кажется, он работает как «производство», независимо от того, что я делаю.

  • Я установил RACK_ENV и RAILS_ENV в качестве переменных конфигурации EB, обе из которых установлены на «промежуточную».Я подтвердил их существование на сервере с помощью «printenv» как ec2-user, webapp и root.
  • Я попытался изменить passenger_app_env в конфигурации Пассажира на «подготовка».Я подтвердил, что Passenger Standalone использует правильную конфигурацию, посмотрев на процесс с помощью 'ps aux |grep пассажирский.
  • Я попытался переключиться на корневой сервер и вручную выполнить «/etc/init.d/passenger stop», а затем «запустить», и распечатка подтверждает, что Пассажир запускается со своей «средой», настроенной на «staging ':
=============== Запущен автономный веб-сервер Phusion Passenger =============== PID-файл: /var/app/support/pids/passenger.pid Файл журнала: /var/app/support/logs/passenger.log Среда: этап Доступно через: http://0.0.0.0/ Обслуживание в фоновом режиме в качестве демона.Проблемы?Проверьте https://www.phusionpassenger.com/documentation/Users%20guide%20Standalone.html#troubleshooting
  • Я поместил это в environment.rb и добавил переменную конфигурации EB для STAGING, чтобы быть 'true'.:

    
      if ENV['STAGING']
        %w(RACK_ENV RAILS_ENV).each do |key|
          ENV[key] = 'staging'
        end
      end

Тем не менее, на тестовой странице, которую я сделал в своем приложении Rails, по-прежнему написано, что Rails.env - это «production» и не использует значения из «staging.rb».И тем не менее, на той же тестовой странице написано, что 'ENV [' RACK_ENV ']' и 'ENV [' RAILS_ENV ']] оба установлены на' staging '.

На данный момент у меня нет идей относительнокак заставить окружение любым другим способом.

1 Ответ

0 голосов
/ 24 сентября 2018

После долгих взломов я обнаружил, что Passenger запускается с passenger_app_env из «production» (по умолчанию), а затем переключается на «staging».Rails.env получит env «production» и будет использовать «production.rb», затем RACK_ENV и RAILS_ENV будут перезаписаны на «staging», создавая запутанную двойственность.

Решением было перемещение директивы passenger_app_env вышев автономном шаблоне Пассажира, который использует Пассажир;у нас это было внутри серверной директивы внутри http-директивы.Перемещение его из директивы сервера в директиву http само по себе решило проблему.

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