2012-09-12 10 views
5

最近、私はJRuby上で動作するように私のレールアプリを適応させていました。 私が遭遇した問題の1つは、Paperclipでした。 ペーパークリップは、ImageMagickのようなコマンドラインツールを実行するためにコカインを使用し、それがその結果Process.spawnを、使用しています。Paperclip with 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

は、いくつかのペーパークリップで掘削やコカインコードの後、私は私が「しかし、サルのパッチのコカインのJRuby

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

BackticksRunnerを使用するための初期化子を書きましたより洗練されたソリューションを探しています。

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ページに記載されているJRubyのcaveatがあります。私にとっては、これを書いていると、仕事にそれを得るための唯一の方法は、コカインのGitHubページのRunners節で述べたように

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

を使用することでした。

+0

私はこの問題を持っているが、私はどこか、どのように私はこれを使用する必要があります理解していません。どんな洞察? – Automatico

+0

私は私の答えに 'project/config/environments/test.rb'ファイルの行を入れます。 – nathan