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 アプリ ディレクトリのコピーがあります。開発中の魅力のように機能しています。私はあなたの助けに感謝します!