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

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

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

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

RSpec

RSpecはRuby用のBDD(behaviour-driven development)フレームワークです。

Ruby on Rails

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

Q&A

解決済

1回答

1485閲覧

'Everyday Rails'のサンプルアプリのRails 6バージョンのマイグレーションができない

unstoppa61e

総合スコア15

Ruby on Rails 6

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

RSpec

RSpecはRuby用のBDD(behaviour-driven development)フレームワークです。

Ruby on Rails

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

0グッド

0クリップ

投稿2021/09/23 01:29

編集2021/09/23 02:36

概要

「Everyday Rails - RSpecによるRailsテスト入門」という書籍を読み始めたところです。
翻訳者のお一人の伊藤淳一さんによるこちらのブログ記事を読み、そこで紹介されていた、サンプルアプリのプルリクのブランチを作り、セットアップを始めました。
手順に従う中で、rails db:migrateによるマイグレーションを行なったところ、次のようなエラーが出てしまいました。

== 20170519014052 AddAttachmentAttachmentToNotes: migrating =================== -- change_table(:notes) rails aborted! StandardError: An error has occurred, this and all later migrations canceled: wrong number of arguments (given 3, expected 2) /Users/me/Documents/everydayrails-rspec-2017/db/migrate/20170519014052_add_attachment_attachment_to_notes.rb:4:in `block in up' /Users/me/Documents/everydayrails-rspec-2017/db/migrate/20170519014052_add_attachment_attachment_to_notes.rb:3:in `up' Caused by: ArgumentError: wrong number of arguments (given 3, expected 2) /Users/me/Documents/everydayrails-rspec-2017/db/migrate/20170519014052_add_attachment_attachment_to_notes.rb:4:in `block in up' /Users/me/Documents/everydayrails-rspec-2017/db/migrate/20170519014052_add_attachment_attachment_to_notes.rb:3:in `up' Tasks: TOP => db:migrate (See full trace by running task with --trace)

詳細

環境

OS: macOS Mojave バージョン 10.14.6
Ruby のバージョン:3.0.0
bundler のバージョン:2.2.3

踏んだ手順

  1. クローンしてプルリクのブランチを作成

git clone https://github.com/JunichiIto/everydayrails-rspec-2017.git
cd everydayrails-rspec-2017
git fetch origin pull/3/head:new
git checkout new
2. bundle installを実行
→ 以下のエラーメッセージが出る

Your bundle is locked to mimemagic (0.3.5), but that version could not be found in any of the sources listed in your Gemfile. If you haven't changed sources, that means the author of mimemagic (0.3.5) has removed it. You'll need to update your bundle to a version other than mimemagic (0.3.5) that hasn't been removed in order to install.

3 bundle update mimemagicを実行
→ 以下のようなエラーメッセージが出る

rake aborted! Could not find MIME type database in the following locations: ["/usr/local/share/mime/packages/freedesktop.org.xml", "/opt/homebrew/share/mime/packages/freedesktop.org.xml", "/opt/local/share/mime/packages/freedesktop.org.xml", "/usr/share/mime/packages/freedesktop.org.xml"] Ensure you have either installed the shared-mime-info package for your distribution, or obtain a version of freedesktop.org.xml and set FREEDESKTOP_MIME_TYPES_PATH to the location of that file.

4 プロジェクトのルートに、freedesktop.org.xmlというファイルを作成(中身はこちらのリンクのもの)し、zshrcにて、FREEDESKTOP_MIME_TYPES_PATHにそのファイルのパスを設定
(追記:手元の macbook にて、shared-mime-infoを brew でインストールして今回のケースを再現しましたが、それでも同じエラーが出ましたので、この部分は問題の原因とは恐らく関係ないように思います)
5 bundle update mimemagicを実行し、成功する
6 冒頭のエラーが発生

なお、エラーが出ているdb/migrate/20170519014052_add_attachment_attachment_to_notes.rbというファイルのリンクはこちらで、中身は以下です。

rb

1class AddAttachmentAttachmentToNotes < ActiveRecord::Migration[5.1] 2 def self.up 3 change_table :notes do |t| 4 t.attachment :attachment 5 end 6 end 7 8 def self.down 9 remove_attachment :notes, :attachment 10 end 11end

もし原因がお分かりでしたら、ご回答頂けますと幸いです。

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

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

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

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

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

guest

回答1

0

ベストアンサー

落ちてるのはPaperclip用のmigrationファイルですね。

参考 https://github.com/thoughtbot/paperclip#add-attachment-column-to-a-table

Paperclipはすでにメンテナンスが止まっているので、最新の環境では実行できない可能性があります。
推測ですが、Ruby 3.0で導入された「キーワード引数の分離」が影響してそうな気がします。

参考 プロと読み解く Ruby 3.0 NEWS - クックパッド開発者ブログ

当てずっぽうの解決策ですが、次のどちらかの方法でうまくいくかもしれません。

  • Ruby 2.7系で動かす
  • rails db:migrateの代わりにrails db:schema:loadを使う

ただ、後者の場合、他にもPaperclipがRuby 3で動かないコードに出くわすかもしれないので、「さっさと環境を構築する」という目的においては前者の方がベターかもしれません。

投稿2021/09/23 03:02

jnchito

総合スコア357

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

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

unstoppa61e

2021/09/23 03:56

ご本人による、迅速なご回答、ありがとうございます! 両方の方法を試させて頂きました。 《前者の方法》 1. Ruby のバージョンを`2.7.0`に変更 2. Gemfile の `ruby '3.0.0'` という部分を`ruby '2.7.0'` に修正 3. `bundle install` を実行 4. `rails db:migrate` を実行 すると、今度は以下のようなエラーが出ました。 ``` == 20170519014052 AddAttachmentAttachmentToNotes: migrating =================== -- change_table(:notes, {}) /Users/me/.rbenv/versions/2.7.0/lib/ruby/gems/2.7.0/gems/paperclip-6.1.0/lib/paperclip/schema.rb:54: warning: Using the last argument as keyword parameters is deprecated; maybe ** should be added to the call /Users/me/.rbenv/versions/2.7.0/lib/ruby/gems/2.7.0/gems/activerecord-6.1.1/lib/active_record/connection_adapters/abstract/schema_definitions.rb:595: warning: The called method `column' is defined here -> 0.0123s == 20170519014052 AddAttachmentAttachmentToNotes: migrated (0.0126s) ========== == 20170829013421 AddLocationToUsers: migrating =============================== -- add_column(:users, :location, :string) -> 0.0042s == 20170829013421 AddLocationToUsers: migrated (0.0044s) ====================== == 20171002102509 AddCompletedToProjects: migrating =========================== -- add_column(:projects, :completed, :boolean) -> 0.0109s == 20171002102509 AddCompletedToProjects: migrated (0.0122s) ================== == 20191014025441 AddForeignKeyConstraintToActiveStorageAttachmentsForBlobId: migrating -- foreign_key_exists?(:active_storage_attachments, {:column=>:blob_id}) -> 0.0019s -- table_exists?(:active_storage_blobs) -> 0.0004s == 20191014025441 AddForeignKeyConstraintToActiveStorageAttachmentsForBlobId: migrated (0.0024s) ``` 《後者の方法》 1. `bin/rails db:environment:set RAILS_ENV=development` を実行 2. `rails db:schema:load` を実行 → 上手くいきました! 後者の方法で進めさせて頂きます。 ありがとうございました!
jnchito

2021/09/23 09:55

> すると、今度は以下のようなエラーが出ました。 これはエラーではなく警告ではないですか?マイグレーションの実行には成功しているのではないでしょうか。 `rails db:schema:load` でも良いのですが、このあともし、rspecのテストが全部パスするところまで進めたら教えてください。(Ruby 3.0でPaperclipが正常に動作するのかどうかが気になっています)
unstoppa61e

2021/09/23 22:06

> これはエラーではなく警告ではないですか?マイグレーションの実行には成功しているのではないでしょうか。 マイグレーションが成功した際はメッセージを吐かないと思い込んでしまっておりました。 お教え頂いた2つの方法、どちらでも上手く行くということだったのですね。 誤解でご迷惑をお掛けしてしまい、ごめんなさい。 > このあともし、rspecのテストが全部パスするところまで進めたら教えてください。 70 examples, 0 failures と、全てパスしました!
jnchito

2021/09/23 22:55

> 誤解でご迷惑をお掛けしてしまい、ごめんなさい。 いえいえ、大丈夫です。 > 全てパスしました! なるほど、ということはRuby 3.0でも(マイグレーション以外なら)Paperclipは動作する、ということですね。情報ありがとうございました!
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問