回形针与JRuby

cth*_*lhu 5 ruby-on-rails jruby paperclip

最近我改编我的rails应用程序在JRuby上运行.我遇到的一个问题是Paperclip.Paperclip使用Cocaine运行ImageMagick等命令行工具,并使用Process.spawn,结果如下:

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

有没有办法让Paperclip与JRuby顺利合作?我只在linux上运行我的应用程序,所以我不介意使用像ImageMagick这样的Linux本机工具.

Rails 3.2.8,JRuby 1.6.7.2

nat*_*han 6

这仍然是JRuby 1.7中的一个问题.JRuby在Cocaine Github页面上有一个警告,它将此定义为JRuby问题.对我来说,在撰写本文时,让它发挥作用的唯一方法就是使用

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

如可卡因Github页面的Runners部分所述.


cth*_*lhu 2

在深入研究 Paperclip 和 Cocaine 代码后,我编写了一个初始化程序,它对 Cocaine 进行猴子修补,以便在 JRuby 上使用BackticksRunner

if RUBY_PLATFORM == 'java'
  module Cocaine
    class CommandLine
      def best_runner
        BackticksRunner.new
      end
    end
  end
end
Run Code Online (Sandbox Code Playgroud)

不过我仍在寻找更清洁的解决方案。