5

最近、RailsアプリをJRubyで実行できるように調整していました。私が遭遇した問題の1つは、ペーパークリップに関するものでした。PaperclipはCocaineを使用してImageMagickなどのコマンドラインツールを実行し、Process.spawnを使用します。その結果、次のようになります。

Errno :: ECHILD:子プロセスなし-子プロセスなし
                 org / jruby / RubyProcess.java:512のwaitpid
                 org / jruby / RubyProcess.java:497のwaitpid
                 /home/cthulhu/.rvm/gems/jruby-1.6.7.2/gems/cocaine-0.3.0/lib/cocaine/command_line/runners/process_runner.rb:21のwaitpid
                    /home/cthulhu/.rvm/gems/jruby-1.6.7.2/gems/cocaine-0.3.0/lib/cocaine/command_line/runners/process_runner.rb:9に電話してください
                 /home/cthulhu/.rvm/gems/jruby-1.6.7.2/gems/cocaine-0.3.0/lib/cocaine/command_line.rb:77で実行
                     /home/cthulhu/.rvm/gems/jruby-1.6.7.2/gems/cocaine-0.3.0/lib/cocaine/command_line.rb:55で実行
                     /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

4

3 に答える 3

6

これはJRuby 1.7でもまだ問題です。これを JRuby の問題として定義する、 Cocaine Github ページに記載されている JRuby に関する警告があります。私にとって、これを書いている時点で、それを機能させる唯一の方法は使用することでした

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

Cocaine Github ページのRunnersセクションに記載されているとおりです。

于 2012-10-30T03:01:14.960 に答える
2

PaperclipとCocaineのコードを掘り下げた後、JRubyでBackticksRunnerを使用するようにCocaineにモンキーパッチを適用するイニシャライザーを作成しました。

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

しかし、私はよりクリーンな解決策を探しています。

于 2012-09-12T11:43:41.047 に答える
2

FWIW、手動でランナーをオーバーライドできるようにするアクセサーを master of Cocaine にプッシュしました。

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

jruby が Process.spawn が利用可能ではないのに利用可能であると報告している理由はわかりませんが、少なくとも回避策があります。

于 2012-09-12T13:54:52.153 に答える