Ruby on rails 由于“共享路径”,Capistrano Puma无法启动

Ruby on rails 由于“共享路径”,Capistrano Puma无法启动,ruby-on-rails,ruby,puma,capistrano3,Ruby On Rails,Ruby,Puma,Capistrano3,我正在尝试构建一个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'

我正在尝试构建一个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

我遗漏了什么吗?

在快速重读您的问题后,问题立即变得明显。您正在设置需要使用单引号字符串插值的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"
...

通常,如果您在capistrano上传的配置文件中共享了_路径,则配置文件将是一个填充的模板—类似于puma.rb.erb,其中包含—部署前您的puma.rb是模板吗?my Rails应用程序中的puma.rb文件是默认文件。运行Capistrano给puma:检查WARN puma.rb未找到!它会在远程服务器的共享目录下生成puma.rb文件,但是这个puma.rb是由某个东西创建的——你使用的是哪个Capistrano puma插件,以及iThanks的哪个版本!就是这样,一个新手错误…:现在一切正常!
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"
...