Rails / Puma не читает переменные окружения при запуске как сервис Systemd - PullRequest
0 голосов
/ 24 апреля 2018

Я только что развернул сервер Rails в производственном режиме на Ubuntu 16.04.Когда я запускаю сервер из командной строки, как показано ниже, сервер запускается и считывает все переменные среды.

bundle exec puma -e production -C /home/deploy/shared/config/puma.rb

Но когда я переключаюсь на Systemd.service и запускаю сервер оттуда, ни один из них не запускается.переменных среды читаются.Я также попытался прочитать и установить переменные окружения в хуке before_configuration, и это, похоже, тоже не помогло.

Установка переменных окружения

#config/initializers/set_environment_variables.rb
module SetEnvironmentVariables
  class Application < Rails::Application
    config.before_configuration do
      env_file = Rails.root.join("config", 'environment.yml').to_s

      if File.exists?(env_file)
        YAML.load_file(env_file)[Rails.env].each do |key, value|
          ENV[key.to_s] = value
        end # end YAML.load_file
      end # end if File.exists?
    end # end config.before_configuration
  end # end class
end # end module

PumaФайл службы systemd -

#/etc/systemd/puma.service
[Unit]
Description=Puma Rails Server
After=network.target

[Service]
Type=simple
User=deploy
WorkingDirectory=/home/deploy/current
ExecStart=/bin/bash -lc 'bundle exec puma -C /home/deploy/shared/config/puma.rb'
ExecStop=/bin/bash -lc 'bundle exec pumactl -S /home/deploy/shared/tmp/pids/puma.state stop'
TimeoutSec=15
Restart=always

[Install]
WantedBy=multi-user.target

Файл инициализации Rollbar -

Rollbar.configure do |config|
  config.access_token = ENV['ROLLBAR_ACCESS_TOKEN']

  unless Rails.env.production?
    config.enabled = false
  end

  config.environment = ENV['ROLLBAR_ENV'] || Rails.env
end

.bashrc

#~/.bashrc
  export ROLLBAR_ACCESS_TOKEN="11111111111"

Запустить puma.service - файл журнала

deploy:~/current/log$ systemctl status puma.service
    ● puma.service - Puma Rails Server
       Loaded: loaded (/etc/systemd/system/puma.service; enabled; vendor preset: enabled)
       Active: active (running) since Tue 2018-04-24 01:34:49 UTC; 3min 23s ago
      Process: 20593 ExecStop=/bin/bash -lc bundle exec pumactl -S /home/deploy/shared/tmp/pids/puma.state stop (code=exited, status=0/SUCCESS)
     Main PID: 20948 (ruby)
        Tasks: 11
       Memory: 133.7M
          CPU: 5.849s
       CGroup: /system.slice/puma.service
               └─20948 puma 3.11.3 (unix:///home/deploy/shared/tmp/sockets/puma.sock) [20180423205334]                                                  
    lines 1-10/10 (END)

Журнал ошибок Rollbar

[Rollbar] Scheduling item
[Rollbar] Sending item
[Rollbar] Got unexpected status code from Rollbar api: 400
[Rollbar] Response: {
  "err": 1,
  "message": "access token required"
}
[Rollbar] Details: https://rollbar.com/instance/uuid?uuid=xxx-xxx-xxx-xxx-xxexxx (only available if report was successful)  

1 Ответ

0 голосов
/ 24 апреля 2018

Я верю, что Арнвальд прав. "systemd имеет директиву Environment, которая устанавливает переменные окружения для выполняемых процессов. Она принимает разделенный пробелами список назначений переменных" В этой ссылке вы можете увидеть, как присваивать переменные единицам systemd.

Я прочитал в этом ответе , что в настоящее время рекомендуется устанавливать их в файл.

Надеюсь, это поможет.

...