Nano Hash - криптовалюты, майнинг, программирование

Не удается запустить puma с systemd в debian, пока работает та же команда запуска в терминале (fe_sendauth: ошибка ввода пароля)

Я пытаюсь управлять сервером Puma на своем веб-сайте ruby ​​on rails с помощью systemd. Puma не может запуститься со следующей ошибкой: PG::ConnectionBad: fe_sendauth: пароль не указан. Когда я сам запускаю Puma в терминале с той же командой запуска, что и в systemd, она работает правильно. Пожалуйста помоги.

Я использую RoR 4.2.11.1, postgresql 11.2, на Debian 9.12, которые работают на VirtualBox 6.0.

файловая структура сайта:

/mytarifs/current - symlink to last release
/mytarifs/releases - relseas
/mytarifs/shared - shared files like database connections

Я успешно запускаю Puma в терминале с помощью следующей команды:

        root@mt-staging-1:/mytarifs/current# bundle exec puma -C config/puma.production.rb

Переменная среды Database_URL:

        DATABASE_URL=postgresql://login_name:password@localhost:5432/db_tarif

С этим URL-адресом базы данных я могу подключиться к своей базе данных с помощью psql

журнал ошибок:

        Mar 07 02:20:39 mt-staging-1 systemd[1]: Started puma for mytarifs (production).
        Mar 07 02:20:40 mt-staging-1 puma[12237]: [12237] Puma starting in cluster mode...
        Mar 07 02:20:40 mt-staging-1 puma[12237]: [12237] * Version 4.3.3 (ruby 2.3.8-p459), codename: Mysterious Traveller
        Mar 07 02:20:40 mt-staging-1 puma[12237]: [12237] * Min threads: 0, max threads: 5  
        Mar 07 02:20:40 mt-staging-1 puma[12237]: [12237] * Environment: production
        Mar 07 02:20:40 mt-staging-1 puma[12237]: [12237] * Process workers: 1
        Mar 07 02:20:40 mt-staging-1 puma[12237]: [12237] * Preloading application
        Mar 07 02:20:47 mt-staging-1 puma[12237]: The PGconn, PGresult, and PGError constants are deprecated, and will be
        Mar 07 02:20:47 mt-staging-1 puma[12237]: removed as of version 1.0.
        Mar 07 02:20:47 mt-staging-1 puma[12237]: You should use PG::Connection, PG::Result, and PG::Error instead, respectively.
        Mar 07 02:20:47 mt-staging-1 puma[12237]: Called from /mytarifs/releases/20200306184828/vendor/bundle/ruby/2.3.0/gems/activesupport-4.2.11.1/lib/active_support/dependencies.rb:240:in `load_dependency'

/mytarifs/current/config/puma.production.rb

threads Integer(ENV['MIN_THREADS']  || 0), Integer(ENV['MAX_THREADS'] || 5) 

        workers Integer(ENV['PUMA_WORKERS'] || 1) 
        preload_app! 

        bind 'unix:///mytarifs/shared/tmp/sockets/puma.sock'
        pidfile '/mytarifs/shared/tmp/pids/puma.production.pid'
        state_path '/mytarifs/shared/tmp/pids/puma.state'

        rackup DefaultRackup 
        environment ENV['RACK_ENV'] || 'production' 

        on_worker_boot do 
          ActiveSupport.on_load(:active_record) do 
            ActiveRecord::Base.establish_connection
          end 
        end 

/mytarifs/current/config/database.yml

        default: &default
          adapter: postgresql
          encoding: unicode
          pool: 125
          username: <%= ENV["PG_USERNAME"] %>
          password: <%= ENV["PG_PASSWORD"] %>
          host: localhost
          template: template0
          reconnect: true

        production:
          <<: *default
          url: <%= ENV["DATABASE_URL"] %>

/etc/systemd/система/пума.сервис

        [Unit]
        Description=puma for mytarifs (production)
        After=network.target

        [Service]
        Type=simple
        Environment=RAILS_ENV=production
        Environment=PUMA_DEBUG=1
        WorkingDirectory=/mytarifs/current
        ExecStart=/root/.rbenv/shims/bundle exec puma -e production -C config/puma.production.rb
        ExecReload=/bin/kill -TSTP $MAINPID
        ExecStop=/bin/kill -TERM $MAINPID
        User=root
        Group=root

        RestartSec=1
        Restart=on-failure

        SyslogIdentifier=puma

        [Install]
         WantedBy=multi-user.target


Ответы:


1

хорошо, я нашел причину ошибки. Это связано с тем, что переменные среды недоступны (равны "") при выполнении systemd. Я не знаю, как получить переменные среды из памяти, но systemd может взять их из файла с помощью директивы EnvironmentFile=/absolute/path/to/environment/file

07.03.2020
Новые материалы

Кластеризация: более глубокий взгляд
Кластеризация — это метод обучения без учителя, в котором мы пытаемся найти группы в наборе данных на основе некоторых известных или неизвестных свойств, которые могут существовать. Независимо от..

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

Частный метод Python: улучшение инкапсуляции и безопасности
Введение Python — универсальный и мощный язык программирования, известный своей простотой и удобством использования. Одной из ключевых особенностей, отличающих Python от других языков, является..

Как я автоматизирую тестирование с помощью Jest
Шутка для победы, когда дело касается автоматизации тестирования Одной очень важной частью разработки программного обеспечения является автоматизация тестирования, поскольку она создает..

Работа с векторными символическими архитектурами, часть 4 (искусственный интеллект)
Hyperseed: неконтролируемое обучение с векторными символическими архитектурами (arXiv) Автор: Евгений Осипов , Сачин Кахавала , Диланта Хапутантри , Тимал Кемпития , Дасвин Де Сильва ,..

Понимание расстояния Вассерштейна: мощная метрика в машинном обучении
В обширной области машинного обучения часто возникает необходимость сравнивать и измерять различия между распределениями вероятностей. Традиционные метрики расстояния, такие как евклидово..

Обеспечение масштабируемости LLM: облачный анализ с помощью AWS Fargate и Copilot
В динамичной области искусственного интеллекта все большее распространение получают модели больших языков (LLM). Они жизненно важны для различных приложений, таких как интеллектуальные..