LoginSignup
14
7

More than 5 years have passed since last update.

[Rails] Carrierwave で S3 にファイルをアップロードしようとしたときにハマった(ArgumentError: wrong number of arguments)

Posted at

Rails5 で Carrierwave 使って S3 にファイルをアップロードしようとしたら、モデルを保存する際に決まったエラーが出てハマった。

> model = Model.new([画像やらなんやら])
> model.save
 => ArgumentError: wrong number of arguments (given 3, expected 1)

Carrierwaveの中身を見たりしたけどよくわからず、設定を見直すことに。

config/initializers/carrierwave.rb の設定は、ネットからパクったやつなんでちゃんと見てなかったけど、こんな行があった。

  config.cache_storage = :fog   

キャッシュも fog を通して S3 に上げますよ。っていう設定らしい。

ここで原因に気づきました。テストでファイルのアップロードを試していたのですが、テスト環境では S3 ではなくローカルに保存するよう設定を書いていた。。。

(app/uploader以下のuploaderクラスのファイル)

if Rails.env.development?
  storage :file
elsif Rails.env.test?
  storage :file
else
  storage :fog
end

結局、development と test 環境では ローカル にファイルを保存するって書いてんのに、キャッシュは fog で S3 にとるぜ、っていう設定になっているためでした。

対策としては、config/initializers/carrierwave.rb の設定を環境ごとにちゃんと分けるコト。(あたりまえのことかもしれませんが...)

if Rails.env.development?                                                                                                                   
  CarrierWave.configure do |config|
   # developmentのもろもろの設定
  end 
elsif Rails.env.test?
  CarrierWave.configure do |config|
    # testのもろもろの設定
  end 
else
  CarrierWave.configure do |config|
    # productionのもろもろの設定
    config.cache_storage = :fog # fogを使う環境だけに適用!
  end 
end

こっちに storage の設定も一緒に書いた方がいいかもしれないとも思った。

コピペで済ませようとしたせいで起きた初歩的なミスでした。

14
7
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
14
7