2012-09-12 187 views
5

最近我正在適應我的rails應用程序在JRuby上運行。 我遇到的問題之一是回形針。 回形針使用可卡因運行命令行工具,如ImageMagick的,它使用Process.spawn,這會導致:回形針與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 

有沒有什麼辦法讓回形針使用JRuby工作順利?我只在linux上運行我的應用程序,所以我不介意使用像ImageMagick這樣的Linux本機工具。

的Rails 3.2.8,JRuby的1.6.7.2

回答

2

在回形針和可卡因代碼一些挖後,我寫了一個初始化這猴子補丁可卡因使用BackticksRunner在JRuby

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

但是我當」米stil尋找更清潔的解決方案。

2

FWIW,我只是推到可卡因掌握一個訪問器,它可以讓你手動覆蓋亞軍。

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

我不知道爲什麼JRuby是報告說,Process.spawn可用時,它不是,但至少我們有一個解決方法。

+1

在上面的代碼中的小錯誤,應該是: 可卡因:: CommandLine.runner =可卡因:: CommandLine :: BackticksRunner.new – cthulhu

6

這仍然是JRuby 1.7中的一個問題。 JRuby在Cocaine Github頁面上指出了一個caveat,該頁面將此定義爲JRuby問題。對我來說,寫這篇文章的,只有這樣,才能得到它的工作是使用

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

如可卡因Github的頁面Runners部分指出。

+0

我有這個問題,但我不明白我應該在哪裏或如何使用它。任何見解? – Automatico

+0

我在文件'project/config/environments/test.rb'中將該行放入我的答案中 – nathan