2012-09-12 176 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