ruby deployment capistrano file-permissions unicorn

ruby - Unicornio no puede escribir el archivo pid



deployment capistrano (3)

El proceso de unicornio se está ejecutando en segundo plano (-d), escriba

ps aux | grep unicorn

y mata el proceso en ejecución de unicornio y luego comienza una vez más.

Estoy usando la implementación de una aplicación Ruby on Rails en un VPS de Linode usando Capistrano. Estoy usando Unicorn como servidor de aplicaciones y Nginx como proxy. Mi problema es que no puedo iniciar Unicorn debido a un problema aparente de permisos, pero me cuesta trabajo rastrearlo.

Unicornio se inicia utilizando esta tarea de Capistrano:

task :start, :roles => :app, :except => { :no_release => true } do run <<-CMD cd #{current_path} && #{unicorn_bin} -c #{unicorn_config} -E #{rails_env} -D CMD end

Vuelvo y ArgumentError que indica que la ruta al archivo pid no se puede escribir.

cap unicorn:start master [d4447d3] modified * executing `unicorn:start'' * executing "cd /home/deploy/apps/gogy/current && /home/deploy/apps/gogy/current/bin/unicorn -c /home/deploy/apps/gogy/shared/config/unicorn.rb -E production -D" servers: ["66.228.52.4"] [66.228.52.4] executing command ** [out :: 66.228.52.4] /home/deploy/apps/gogy/shared/bundle/ruby/1.8/gems/unicorn-4.1.1/lib/unicorn/configurator.rb:88:in `reload'': ** [out :: 66.228.52.4] directory for pid=/home/deploy/apps/shared/pids/unicorn.pid not writable (ArgumentError) ** [out :: 66.228.52.4] from /home/deploy/apps/gogy/shared/bundle/ruby/1.8/gems/unicorn-4.1.1/lib/unicorn/configurator.rb:84:in `each'' ** [out :: 66.228.52.4] from /home/deploy/apps/gogy/shared/bundle/ruby/1.8/gems/unicorn-4.1.1/lib/unicorn/configurator.rb:84:in `reload'' ** [out :: 66.228.52.4] from /home/deploy/apps/gogy/shared/bundle/ruby/1.8/gems/unicorn-4.1.1/lib/unicorn/configurator.rb:65:in `initialize'' ** [out :: 66.228.52.4] from /home/deploy/apps/gogy/shared/bundle/ruby/1.8/gems/unicorn-4.1.1/lib/unicorn/http_server.rb:102:in `new'' ** [out :: 66.228.52.4] from /home/deploy/apps/gogy/shared/bundle/ruby/1.8/gems/unicorn-4.1.1/lib/unicorn/http_server.rb:102:in `initialize'' ** [out :: 66.228.52.4] from /home/deploy/apps/gogy/shared/bundle/ruby/1.8/gems/unicorn-4.1.1/bin/unicorn:121:in `new'' ** [out :: 66.228.52.4] from /home/deploy/apps/gogy/shared/bundle/ruby/1.8/gems/unicorn-4.1.1/bin/unicorn:121 ** [out :: 66.228.52.4] from /home/deploy/apps/gogy/current/bin/unicorn:16:in `load'' ** [out :: 66.228.52.4] from /home/deploy/apps/gogy/current/bin/unicorn:16 ** [out :: 66.228.52.4] master failed to start, check stderr log for details command finished in 1032ms failed: "rvm_path=/usr/local/rvm /usr/local/rvm/bin/rvm-shell ''default'' -c ''cd /home/deploy/apps/gogy/current && /home/deploy/apps/gogy/current/bin/unicorn -c /home/deploy/apps/gogy/shared/config/unicorn.rb -E production -D''" on 66.228.52.4

Finalmente, aquí están las secciones relevantes de mi archivo de configuración Unicorn (unicorn.rb)

# Ensure that we''re running in the production environment rails_env = ENV[''RAILS_ENV''] || ''production'' # User to run under user ''deploy'', ''deploy'' # We will spawn off two worker processes and one master process worker_processes 2 # set the default working directory working_directory "/home/deploy/apps/gogy/current" # This loads the application in the master process before forking # worker processes # Read more about it here: # http://unicorn.bogomips.org/Unicorn/Configurator.html preload_app true timeout 30 # This is where we specify the socket. # We will point the upstream Nginx module to this socket later on listen "/home/deploy/apps/shared/sockets/unicorn.sock", :backlog => 64 pid "/home/deploy/apps/shared/pids/unicorn.pid" # Set the path of the log files stderr_path "/home/deploy/apps/gogy/current/log/unicorn.stderr.log" stdout_path "/home/deploy/apps/gogy/current/log/unicorn.stdout.log"

Estoy implementando con Capistrano bajo el usuario y el grupo de ''despliegue'' y eso es lo que Unicorn debe ejecutar también.

¿Alguien tiene alguna idea de por qué Unicorn no puede escribir el archivo pid? Cualquier ayuda sería apreciada grandemente !!!

  • Micro

En realidad, el mensaje de error ya te ha dicho por qué:

directorio para pid = / home / deploy / apps / shared / pids / unicorn.pid no se puede escribir

Entonces, ¿existe el directorio /home/deploy/apps/shared/pids ? Si no, debes llamar a mkdir para crearlo.


en capistrano 3; si cambiamos los roles a: todos, entonces, mientras que el despliegue capistrano dice; WARN [SKIPPING] No Matching Host for ..... y después de la implementación, todos los enlaces simbólicos ya no funcionan. Y si la carpeta tmp / pids en la matriz de enlaces simbólicos, entonces unicorn no puede encontrar la carpeta tmp / pids y decir que unicorn.pid no se puede escribir.

Por eso debemos usar; roles: %w{web app db} lugar de roles :all .

Línea de servidor de muestra en production.rb;

server ''YOUR_SERVER_IP'', user: ''YOUR_DEPLOY_USER'', roles: %w{web app db}, ssh_options: { forward_agent: true }