¿Por qué mi delayed_job falla sin RVM?

Tengo un delayed_job instalado, y comienzo el daemon para ejecutar los trabajos con este script Ruby:

 require 'rubygems' require 'daemon_spawn' $: << '.' RAILS_ROOT = File.expand_path(File.join(File.dirname(__FILE__), '..')) class DelayedJobWorker  File.join(RAILS_ROOT, "log", "delayed_job.log"), :pid_file => File.join(RAILS_ROOT, 'tmp', 'pids', 'delayed_job.pid'), :sync_log => true, :working_dir => RAILS_ROOT) 

Si ejecuto el comando con rvmsudo funciona perfectamente.

Si simplemente utilizo el comando Ruby sin RVM, falla y esta es la salida. No tengo idea de por qué sucede esto. ¿Podrías darme alguna pista?

 user@mysystem:~/redeal.it/application$ ruby script/delayed_job start production /usr/local/rvm/gems/ruby-1.9.3-p194/gems/daemon-spawn-0.4.2/lib/daemon_spawn.rb:16:in `kill': Operation not permitted (Errno::EPERM) from /usr/local/rvm/gems/ruby-1.9.3-p194/gems/daemon-spawn-0.4.2/lib/daemon_spawn.rb:16:in `alive?' from /usr/local/rvm/gems/ruby-1.9.3-p194/gems/daemon-spawn-0.4.2/lib/daemon_spawn.rb:125:in `alive?' from /usr/local/rvm/gems/ruby-1.9.3-p194/gems/daemon-spawn-0.4.2/lib/daemon_spawn.rb:176:in `block in start' from /usr/local/rvm/gems/ruby-1.9.3-p194/gems/daemon-spawn-0.4.2/lib/daemon_spawn.rb:176:in `select' from /usr/local/rvm/gems/ruby-1.9.3-p194/gems/daemon-spawn-0.4.2/lib/daemon_spawn.rb:176:in `start' from /usr/local/rvm/gems/ruby-1.9.3-p194/gems/daemon-spawn-0.4.2/lib/daemon_spawn.rb:165:in `spawn!' from script/delayed_job:37:in `' 

Tienes un problema de permiso.

En pocas palabras: tiene un trabajo retrasado ejecutándose bajo otro usuario (posiblemente debido a la utilización de rvmsudo ), y el engendro del demonio está intentando matarlo. Obtendrá una Operation not permitted .

Intente matar delayed_job primero con rvmsudo, asegúrese de que no se esté ejecutando (pruebe ps aux ) y luego intente iniciar sin rvmsudo .

Deberia de funcionar.

Primero, eche un vistazo a shared / pids / delayed_job.pid y vea si el proceso se está ejecutando. En mi caso, parecía que estaba cerrado y que el archivo pid se dejó en su lugar. La secuencia de comandos de implementación intentaba eliminar un proceso no existente y estaba dando ese error de permiso.

He eliminado delayed_job.pid y despliegue con éxito.