2012-09-12 16 views
5

Recientemente estaba adaptando mi aplicación de rieles para ejecutar en JRuby. Uno de los problemas que he encontrado fue con Paperclip. Paperclip utiliza cocaína para ejecutar herramientas de línea de comandos como ImageMagick y utiliza Process.spawn, que se traduce en:Paperclip con JRuby

 
Errno::ECHILD: No child processes - No child processes 
       waitpid at org/jruby/RubyProcess.java:512 
       waitpid at org/jruby/RubyProcess.java:497 
       waitpid at /home/cthulhu/.rvm/gems/jruby-1.6.7.2/gems/cocaine-0.3.0/lib/cocaine/command_line/runners/process_runner.rb:21 
        call at /home/cthulhu/.rvm/gems/jruby-1.6.7.2/gems/cocaine-0.3.0/lib/cocaine/command_line/runners/process_runner.rb:9 
       execute at /home/cthulhu/.rvm/gems/jruby-1.6.7.2/gems/cocaine-0.3.0/lib/cocaine/command_line.rb:77 
        run at /home/cthulhu/.rvm/gems/jruby-1.6.7.2/gems/cocaine-0.3.0/lib/cocaine/command_line.rb:55 
        run at /home/cthulhu/.rvm/gems/jruby-1.6.7.2/gems/paperclip-3.2.0/lib/paperclip/helpers.rb:29 

¿Hay alguna manera de hacer que funcione sin problemas con el Paperclip JRuby? Estoy ejecutando mi aplicación solo en Linux, así que no me importa usar herramientas nativas de Linux como ImageMagick.

Rails 3.2.8, JRuby 1.6.7.2

Respuesta

2

Después de algunas excavaciones en el código de clip y cocaína que escribió un inicializador cuales mono-parches de usar cocaína BackticksRunner cuando en JRuby

if RUBY_PLATFORM == 'java' 
    module Cocaine 
    class CommandLine 
     def best_runner 
     BackticksRunner.new 
     end 
    end 
    end 
end 

Sin embargo yo' Todavía estoy buscando una solución más limpia.

2

FWIW, Acabo de empujar al maestro de la cocaína un accesorio que le permitirá anular manualmente el corredor.

Cocaine::CommandLine.runner = Cocaine::CommandLine::BackticksRunner.new 

no sé qué jruby informa que Process.spawn está disponible cuando no lo es, pero al menos tenemos una solución.

+1

pequeño error en el código anterior, debería ser: Cocaína :: CommandLine.runner = Cocaína :: CommandLine :: BackticksRunner.new – cthulhu

6

Esto todavía es un problema en JRuby 1.7. Hay un caveat para JRuby anotado en la página de Github Cocaine que define esto como un problema de JRuby. Para mí, como de este escrito, la única manera de conseguir que funcione era utilizar

Cocaine::CommandLine.runner = Cocaine::CommandLine::BackticksRunner.new

como se señala en la sección de la página Runners cocaína Github.

+0

Tengo este problema, pero no entiendo dónde o cómo debo usar esto. ¿Alguna idea? – Automatico

+0

Pongo la línea en mi respuesta en el archivo 'project/config/environments/test.rb' – nathan