Rails4 のsystemに carrierwave + S3 を追加しようとしてハマっています。
imegeを入れてsaveすると 以下のエラーとなります。
ArgumentError (wrong number of arguments (given 3, expected 1)): app/models/image.rb:133:in `set_file_and_create_user' app/controllers/images_controller.rb:33:in `upload_one'
image.rb:133 は次の save! のところです。debugのために { }つけたりしてます。
image = Image.new({user_id: user.id, path: "", file: jpg}) image.save!
logですとtraceが出てくれなかったので、rails c にて試した所
> Image.create!(user_id: 1, path: "",file: open("/home/.../3207.jpg"))` (0.2ms) BEGIN SQL (0.4ms) INSERT INTO `images` (`user_id`, `path`, `file`, `created_at`, `updated_at`) VALUES (1, '', '0000999999_Camera_20150716083207.jpg', '2021-06-10 06:23:44', '2021-06-10 06:23:44') (54.9ms) ROLLBACK Traceback (most recent call last): 16: from /home/.../gems/activerecord-4.2.11.3/lib/active_record/callbacks.rb:302:in `create_or_update' 省略 2: from /home/.../gems/carrierwave-1.3.2/lib/carrierwave/storage/file.rb:36:in `store!' 1: from /home/.../gems/carrierwave-1.3.2/lib/carrierwave/storage/fog.rb:431:in `copy_to' ArgumentError (wrong number of arguments (given 3, expected 1))
となりました。
# carrierwave/storage/file.rb 36行目は elseの中の file.copy_to def store!(file) path = ::File.expand_path(uploader.store_path, uploader.root) if uploader.move_to_store file.move_to(path, uploader.permissions, uploader.directory_permissions) else file.copy_to(path, uploader.permissions, uploader.directory_permissions) end end # carrierwave/storage/fog.rb 431行目は def 文 def copy_to(new_path) connection.copy_object(@uploader.fog_directory, file.key, @uploader.fog_directory, new_path, acl_header) CarrierWave::Storage::Fog::File.new(@uploader, @base, new_path) end
確かに呼ぶ方はarg 3, 呼ばれる方は arg 1 なので、エラーとなるのはわかります。
で、
今まで Rails4 + carrierwave + fog + S3 でこういう障害が起きた、というのは目にしたことがありません。
私の設定のミスで呼び先がおかしくなったのか、rails4では carrierwave 1.3.2 は合わないのか
このあたりわかりますでしょうか。
aws_secret_access_key を変えるとエラーが変わり、SignatureDoesNotMatch のエラーが帰って来るので、S3との接続までは通って居るようです
Ubuntu 21.04 productionは EC2 linux
Rails 4.2.11.3
ruby 2.5.1p57
carrierwave (1.3.2)
fog (1.41.0)
「この期に及んでRails4で機能UPするのか!?」というところは当面目をつぶってください。「社内利用だから4のままでいいから進めてくれ」とのご要望なので。
あなたの回答
tips
プレビュー