2012-09-12 19 views
5

Recentemente stavo adattando la mia app per rotaie su JRuby. Uno dei problemi che ho riscontrato era con Paperclip. Paperclip usa cocaina per eseguire strumenti a linea di comando come ImageMagick e utilizza Process.spawn, che si traduce in:Graffetta 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 

C'è un modo per rendere Paperclip lavorare senza problemi con JRuby? Sto eseguendo la mia app solo su Linux, quindi non mi interessa usare strumenti nativi di Linux come ImageMagick.

Rails 3.2.8, JRuby 1.6.7.2

risposta

2

Dopo un po 'di scavo in Paperclip e cocaina codice che ho scritto un inizializzatore che scimmia-patch cocaina da utilizzare BackticksRunner quando in JRuby

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

Tuttavia I' Sto cercando una soluzione più pulita.

2

FWIW, ho appena inviato a master of Cocaine un accessor che consentirà di ignorare manualmente il Runner.

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

Non so perché JRuby sta riportando che Process.spawn è disponibile quando non lo è, ma almeno abbiamo una soluzione.

+1

piccolo errore nel codice sopra, dovrebbe essere: Cocaina :: CommandLine.runner = Cocaina :: CommandLine :: BackticksRunner.new – cthulhu

6

Questo è ancora un problema in JRuby 1.7. C'è un caveat per JRuby annotato sulla pagina Gitub Cocaine che definisce questo come un problema JRuby. Per me, come di questa scrittura, l'unico modo per farlo funzionare è stato quello di utilizzare

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

come indicato nella sezione Runners della pagina cocaina Github.

+0

Ho questo problema ma non capisco dove o come dovrei usare questo. Qualche intuizione? – Automatico

+0

Ho inserito la riga nella mia risposta nel file "progetto/config/environments/test.rb" – nathan