1

Rails アプリ内のカスタム ペーパークリップ プロセッサに問題があります。サウンドファイルをアップロードすると、プロセッサがシェル コマンドを介して波形イメージを作成します (このgemによって提供されます) 。

Ubuntu 12.04 (本番環境) で RoR 3.2.7 / Ruby 1.9.3 を実行しています。ペーパークリップを取り付けた私のモデルは次のようになります。

# encoding: utf-8
class Track < ActiveRecord::Base
  has_attached_file :original_file,
                    :styles => { :waveform_image => { :waveform => true } },
                    :processors => [:sound_processor],
                    :storage => :s3,
                    :s3_credentials => "#{Rails.root.to_s}/config/s3.yml",
                    :url  => ":s3_eu_url",
                    :path => "sounds/:id/:five_digit_id_:basename_:style.:extension"
end

対応するペーパークリップ プロセッサ:

class Paperclip::SoundProcessor < Paperclip::Processor

  def initialize file, options = {}, attachment = nil
    # cut for brevity
  end

  def make
    src = @file
    dst = Tempfile.new([@basename, @current_format])
    dst.binmode

    if @waveform
      cmd = "waveform #{File.expand_path(src.path)} #{File.expand_path(dst.path)}"
      Paperclip.log(cmd)
      out = `#{cmd}`
      dst = File.open "#{File.expand_path(dst.path)}"
    end

    dst
  end
end

コマンドが

waveform #{File.expand_path(src.path)} #{File.expand_path(dst.path)}

実稼働マシン (Ubuntu 12.04) で実行されると、次のエラーが表示されます。

/usr/bin/env: ruby: No such file or directory

ただし、usr/bin/env はディレクトリではなくファイルです。ruby の実行ファイルがないので、シェルコマンドを実行するときに正しい場所を渡すにはどうすればよいですか?

PS: 私の開発マシン (OSX) では、usr/bin/env に Rails アプリ ディレクトリのコピーがあります。開発中の魅力のように機能しています。私はあなたの助けに感謝します!

4

1 に答える 1

0

エラー メッセージは、ruby 実行可能ファイルが見つからなかったことを示しています。現在、質問に含まれているコードとは関係ありません。

エラーは、行を含むスクリプト ファイルから発生していますwaveform #{File.expand_path(src.path)} #{File.expand_path(dst.path)}

問題に対するこれらの回答を確認してください: - https://stackoverflow.com/a/6126419/429758 - https://stackoverflow.com/a/5241638/429758 - https://stackoverflow.com/a/1064319/429758

Ruby 実行可能ファイルが実稼働環境で見つからない理由について、いくつかのアイデアが得られるはずです。

于 2012-10-06T19:42:41.210 に答える