Capistrano Puma не запускается из-за "shared_path" - PullRequest
0 голосов
/ 14 мая 2018

Я пытаюсь создать сценарий развертывания Capistrano, и он работает до сих пор, за исключением части Puma:

set :puma_bind,       'unix://#{shared_path}/tmp/sockets/puma_myapp.sock;'
set :puma_state,      '#{shared_path}/tmp/pids/puma_myapp.state'
set :puma_pid,        '#{shared_path}/tmp/pids/puma_myapp.pid'
set :puma_access_log, '#{release_path}/log/puma.error.log'
set :puma_error_log,  '#{release_path}/log/puma.access.log'
set :puma_conf,       "#{shared_path}/puma.rb"
set :puma_threads,    [4, 16]
set :puma_workers,    3
set :puma_env, 'production'
set :assets_roles, [:web, :app]
set :rails_assets_groups, :assets
set :keep_assets, 2
append :rbenv_map_bins, 'puma', 'pumactl'

namespace :puma do
  desc 'create directories for Puma pids and socket'
  task :make_dirs do
    on roles(:app) do
      execute "mkdir #{shared_path}/tmp/sockets -p"
      execute "mkdir #{shared_path}/tmp/pids -p"
    end
  end

  before :start, :make_dirs
end

Когда я выполняю сценарий, он завершается неудачно после команды puma:start, выдающей ошибки:

bundler: failed to load command: puma (/var/www/myapp/shared/bundle/ruby/2.5.0/bin/puma)
  01 NameError: undefined local variable or method `shared_path' for #<Puma::DSL:0x000055e752c4c018>
  01 Did you mean?  state_path

Я посмотрел файл conf / puma.rb, который загружен на сервер, и ничто не кажется интересным, кроме использования переменной #{shared_path}, которая не определена в puma.RB файл:

#!/usr/bin/env puma

directory '/var/www/myapp/current'
rackup "/var/www/myapp/current/config.ru"
environment 'production'

tag ''

pidfile "#{shared_path}/tmp/pids/puma.pid"
state_path "#{shared_path}/tmp/pids/puma.state"
stdout_redirect '#{release_path}/log/puma.error.log', '#{release_path}/log/puma.access.log', true

threads 0,16

bind 'unix://#{shared_path}/tmp/sockets/puma_myapp.sock;'

workers 0

prune_bundler

on_restart do
  puts 'Refreshing Gemfile'
  ENV["BUNDLE_GEMFILE"] = ""
end

Я что-то упустил?

1 Ответ

0 голосов
/ 14 мая 2018

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

set :puma_bind,       "unix://#{shared_path}/tmp/sockets/puma_myapp.sock;"
set :puma_state,      "#{shared_path}/tmp/pids/puma_myapp.state"
set :puma_pid,        "#{shared_path}/tmp/pids/puma_myapp.pid"
...
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...