前提・実現したいこと
初の質問なので足りないソースコードなどあったら随時指摘してください。
railsで音楽アプリの投稿機能を作っています。
ユーザーが任意のmp3式の音声ファイルを選択してそれを投稿させようとしていますが実装中に以下のエラーメッセージが発生しました。
僕の勝手な認識だと、carrierwave-audioを入れればファイルのアップロードはうまくいくものと思っていたのですが、今回『soxを入れろ』というエラーメッセージが出ています。しかしgem 'ruby-sox', '~> 0.0.3'を入れてみてもまた同じエラーが発生して解決策がわかりません。
ruby '2.5.7'
gem 'rails', '~> 5.2.4', '>= 5.2.4.3'で開発を行っています。
発生している問題・エラーメッセージ
Sox::Error (No such file or directory - sox. Do you have `sox' installed?)
エラーメッセージ
soxファイルというのがどうやら見つからないそうなのですが、そもそもこのsoxファイルはgemとして入れるべきなのですか?それとも自分のPC上に入れるべきなのかがわかりません。
該当のソースコード
Gemfile
gem 'carrierwave'
gem 'carrierwave-audio', git: 'git@github.com:tanakaworld/carrierwave-audio.git'
gem 'ruby-sox', '~> 0.0.3'
schema.rb
create_table "tracks", force: :cascade do |t|
t.string "track_audio_id"
t.string "track_image_id"
t.string "title"
t.text "description"
t.integer "user_id"
t.datetime "created_at", null: false
t.datetime "updated_at", null: false
end
audio_file_uploader.rb
class AudioFileUploader < CarrierWave::Uploader::Base
Include RMagick or MiniMagick support:
include CarrierWave::RMagick
include CarrierWave::MiniMagick
include CarrierWave::Audio
Choose what kind of storage to use for this uploader:
storage :file
storage :fog
Override the directory where uploaded files will be stored.
This is a sensible default for uploaders that are meant to be mounted:
def store_dir
"uploads/#{model.class.to_s.underscore}/#{mounted_as}/#{model.id}"
end
Provide a default URL as a default if there hasn't been a file uploaded:
def default_url(*args)
# For Rails 3.1+ asset pipeline compatibility:
# ActionController::Base.helpers.asset_path("fallback/" + [version_name, "default.png"].compact.join('_'))
"/images/fallback/" + [version_name, "default.png"].compact.join('_')
end
Process files as they are uploaded:
process scale: [200, 300]
def scale(width, height)
# do something
end
Create different versions of your uploaded files:
version :thumb do
process resize_to_fit: [50, 50]
end
Add a white list of extensions which are allowed to be uploaded.
For images you might use something like this:
def extension_whitelist
%w(jpg jpeg gif png)
end
Override the filename of the uploaded files:
Avoid using model.id or version_name here, see uploader/store.rb for details.
def filename
"something.jpg" if original_filename
end
version :mp3 do
process :convert => [{output_format: :mp3}]
def full_filename(for_file) "#{super.chomp(File.extname(super))}.mp3" end
end
version :wav do
process :convert => [{output_format: :wav}]
def full_filename(for_file)
"#{super.chomp(File.extname(super))}.wav"
end
end
end
track.rb
class Track < ApplicationRecord
belongs_to :user
mount_uploader :track_image_id, ImagesUploader
mount_uploader :track_audio_id, AudioFileUploader
has_many :favorites, dependent: :destroy
with_options presence: true do validates :title validates :description validates :track_image_id validates :track_audio_id end
end
試したこと
gem 'ruby-sox', '~> 0.0.3'を入れてみたが同じエラーが出てしまった。
carrierwave-audioを入れる前carrierwave gemのみを使って画像だけ表示することはできました。
補足情報(FW/ツールのバージョンなど)```ここに言語を入力
コード
回答1件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2020/08/23 14:38 編集
2020/08/23 14:41
2020/08/23 17:48
2020/08/23 21:56
2020/08/24 02:36