質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
Ruby on Rails

Ruby on Railsは、オープンソースのWebアプリケーションフレームワークです。「同じことを繰り返さない」というRailsの基本理念のもと、他のフレームワークより少ないコードで簡単に開発できるよう設計されています。

Ruby on Rails 4

Ruby on Rails4はRubyによって書かれたオープンソースのウェブフレームワークです。 Ruby on Railsは「設定より規約」の原則に従っており、効率的に作業を行うために再開発を行う必要をなくしてくれます。

Q&A

0回答

1514閲覧

carrierwaveの内部同士で「ArgumentError (wrong number of arguments (given 3, expected 1))

winterboum

総合スコア23329

Ruby on Rails

Ruby on Railsは、オープンソースのWebアプリケーションフレームワークです。「同じことを繰り返さない」というRailsの基本理念のもと、他のフレームワークより少ないコードで簡単に開発できるよう設計されています。

Ruby on Rails 4

Ruby on Rails4はRubyによって書かれたオープンソースのウェブフレームワークです。 Ruby on Railsは「設定より規約」の原則に従っており、効率的に作業を行うために再開発を行う必要をなくしてくれます。

0グッド

0クリップ

投稿2021/06/10 06:57

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のままでいいから進めてくれ」とのご要望なので。

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

まだ回答がついていません

会員登録して回答してみよう

アカウントをお持ちの方は

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問