Ruby 3.0.4 -> 3.2.2、Rails 6.1.0 -> 7.1.4の作業ログ - Qiita (2025)

大変勉強になりました。ぜひご一読ください。

Gemfile更新

source 'https://rubygems.org'git_source(:github) { |repo| "https://github.com/#{repo}.git" }- ruby '3.0.4'+ ruby '3.2.2'# Bundle edge Rails instead: gem 'rails', github: 'rails/rails'- gem 'rails', '~> 6.1.0'+ gem 'rails', '~> 7.1.4'

Dockerfile更新

- FROM ruby:3.0.4+ FROM ruby:3.2.2# environmentENV APP_ROOT /app

bundle installでversion conflict発生

bundle installすると以下のエラーが出ました。記載の通り、Gemfile.lockでは6.1.6となっているが、Gemfileは7.1.4を求めているためです。末尾に書いてある通り、bundle updateをします。

Bundler could not find compatible versions for gem "activesupport": In snapshot (Gemfile.lock): activesupport (= 6.1.6) In Gemfile: rails (~> 7.1.4) was resolved to 7.1.4, which depends on activesupport (= 7.1.4) webpacker (~> 5.0) was resolved to 5.4.3, which depends on railties (>= 5.2) was resolved to 6.1.6, which depends on activesupport (= 6.1.6)Running `bundle update` will rebuild your snapshot from scratch, using onlythe gems in your Gemfile, which may resolve the conflict.

bundle updateが終わらない

1時間待ってもこの状況。ドットが増えるだけ。Gemfile.lockを削除して、bundle installしました。

Ruby 3.0.4 -> 3.2.2、Rails 6.1.0 -> 7.1.4の作業ログ - Qiita (1)

追記

以下の順番でコマンドを実行するとすんなりいく時がありました。

bundle update railsbundle update 

nokogiriでconflict発生

以下のエラーが発生。nokogiri v1.12.5をインストールしようとするが、Rails v7.1.4に対応していないとのこと

root@31976fb95aec:/app# bundle installFetching gem metadata from https://rubygems.org/........Resolving dependencies...Could not find compatible versionsBecause rails >= 7.1.4, < 7.2.0.beta1 depends on actionview = 7.1.4 and actionview >= 7.1.0.beta1 depends on rails-html-sanitizer ~> 1.6, rails >= 7.1.4, < 7.2.0.beta1 requires rails-html-sanitizer ~> 1.6.And because rails-html-sanitizer >= 1.6.0.rc1 depends on nokogiri ~> 1.14, rails >= 7.1.4, < 7.2.0.beta1 requires nokogiri ~> 1.14.So, because Gemfile depends on rails ~> 7.1.4 and Gemfile depends on nokogiri = 1.12.5, version solving has failed.

Gemfileを見ると、バージョンを指定していたのでバージョン指定を削除して、再度bundle install

- gem 'nokogiri', '1.12.5'+ gem 'nokogiri'

debaseのインストールでエラー

以下のエラーが発生。よくわからないし、ステップ実行でデバッグすることもあまりないので、debaseを削除しました。

Gem::Ext::BuildError: ERROR: Failed to build gem native extension. current directory: /usr/local/bundle/gems/debase-0.2.4.1/ext/usr/local/bin/ruby extconf.rbchecking for vm_core.h... nochecking for vm_core.h... no**************************************************************************No source for ruby-3.2.2-p53 (revision e51014f9c05aa65cbf203442d37fef7c12390015) provided withdebase-ruby_core_source gem. Falling back to ruby-3.2.0-p0.**************************************************************************checking for vm_core.h... yeschecking for iseq.h... yeschecking for version.h... yeschecking for vm_core.h... yeschecking for vm_insnhelper.h... noMakefile creation failed************************************************************* NOTE: If your headers were not found, try passing --with-ruby-include=PATH_TO_HEADERS **************************************************************** extconf.rb failed ***Could not create Makefile due to some reason, probably lack of necessarylibraries and/or headers. Check the mkmf.log file for more details. You mayneed configuration options.Provided configuration options: --with-opt-dir --without-opt-dir --with-opt-include --without-opt-include=${opt-dir}/include --with-opt-lib --without-opt-lib=${opt-dir}/lib --with-make-prog --without-make-prog --srcdir=. --curdir --ruby=/usr/local/bin/$(RUBY_BASE_NAME) --with-ruby-dir --without-ruby-dir --with-ruby-include --without-ruby-include=${ruby-dir}/include --with-ruby-lib --without-ruby-lib=${ruby-dir}/lib --with-vm_core-dir --without-vm_core-dir --with-vm_core-include --without-vm_core-include=${vm_core-dir}/include --with-vm_core-lib --without-vm_core-lib=${vm_core-dir}/lib --with-iseq-dir --without-iseq-dir --with-iseq-include --without-iseq-include=${iseq-dir}/include --with-iseq-lib --without-iseq-lib=${iseq-dir}/lib --with-version-dir --without-version-dir --with-version-include --without-version-include=${version-dir}/include --with-version-lib --without-version-lib=${version-dir}/lib --with-vm_insnhelper-dir --without-vm_insnhelper-dir --with-vm_insnhelper-include --without-vm_insnhelper-include=${vm_insnhelper-dir}/include --with-vm_insnhelper-lib --without-vm_insnhelper-lib=${vm_insnhelper-dir}/libTo see why this extension failed to compile, please check the mkmf.log which can be found here: /usr/local/bundle/extensions/x86_64-linux/3.2.0/debase-0.2.4.1/mkmf.logextconf failed, exit code 1Gem files will remain installed in /usr/local/bundle/gems/debase-0.2.4.1 for inspection.Results logged to /usr/local/bundle/extensions/x86_64-linux/3.2.0/debase-0.2.4.1/gem_make.out /usr/local/lib/ruby/3.2.0/rubygems/ext/builder.rb:119:in `run' /usr/local/lib/ruby/3.2.0/rubygems/ext/ext_conf_builder.rb:27:in `build' /usr/local/lib/ruby/3.2.0/rubygems/ext/builder.rb:187:in `build_extension' /usr/local/lib/ruby/3.2.0/rubygems/ext/builder.rb:221:in `block in build_extensions' /usr/local/lib/ruby/3.2.0/rubygems/ext/builder.rb:218:in `each' /usr/local/lib/ruby/3.2.0/rubygems/ext/builder.rb:218:in `build_extensions' /usr/local/lib/ruby/3.2.0/rubygems/installer.rb:843:in `build_extensions' /usr/local/lib/ruby/3.2.0/bundler/rubygems_gem_installer.rb:72:in `build_extensions' /usr/local/lib/ruby/3.2.0/bundler/rubygems_gem_installer.rb:28:in `install' /usr/local/lib/ruby/3.2.0/bundler/source/rubygems.rb:200:in `install' /usr/local/lib/ruby/3.2.0/bundler/installer/gem_installer.rb:54:in `install' /usr/local/lib/ruby/3.2.0/bundler/installer/gem_installer.rb:16:in `install_from_spec' /usr/local/lib/ruby/3.2.0/bundler/installer/parallel_installer.rb:156:in `do_install' /usr/local/lib/ruby/3.2.0/bundler/installer/parallel_installer.rb:147:in `block in worker_pool' /usr/local/lib/ruby/3.2.0/bundler/worker.rb:62:in `apply_func' /usr/local/lib/ruby/3.2.0/bundler/worker.rb:57:in `block in process_queue' /usr/local/lib/ruby/3.2.0/bundler/worker.rb:54:in `loop' /usr/local/lib/ruby/3.2.0/bundler/worker.rb:54:in `process_queue' /usr/local/lib/ruby/3.2.0/bundler/worker.rb:90:in `block (2 levels) in create_threads'An error occurred while installing debase (0.2.4.1), and Bundler cannot continue.In Gemfile: debase

Gemfileから削除しました。

- gem 'debase'- gem 'ruby-debug-ide' 

RSpecを実行するとDatabaseCleanerでエラーがでる

"3/"をIntergerに直せないというエラーのようです。

root@2270bf2d2ad8:/app# bundle exec rspecDEPRECATION WARNING: Support for `config.active_support.cache_format_version = 6.1` has been deprecated and will be removed in Rails 7.2.Check the Rails upgrade guide at https://guides.rubyonrails.org/upgrading_ruby_on_rails.html#new-activesupport-cache-serialization-formatfor more information on how to upgrade. (called from <top (required)> at /app/config/environment.rb:5)An error occurred in a `before(:suite)` hook.Failure/Error: DatabaseCleaner[:redis].clean_with(:deletion)ArgumentError: invalid value for Integer(): "3/"# /usr/local/bundle/gems/redis-client-0.22.2/lib/redis_client/url_config.rb:33:in `Integer'# /usr/local/bundle/gems/redis-client-0.22.2/lib/redis_client/url_config.rb:33:in `db'# /usr/local/bundle/gems/redis-client-0.22.2/lib/redis_client/config.rb:198:in `initialize'# /usr/local/bundle/gems/redis-client-0.22.2/lib/redis_client.rb:166:in `new'# /usr/local/bundle/gems/redis-client-0.22.2/lib/redis_client.rb:166:in `config'# /usr/local/bundle/gems/redis-5.3.0/lib/redis/client.rb:23:in `config'# /usr/local/bundle/gems/redis-5.3.0/lib/redis.rb:142:in `initialize_client'# /usr/local/bundle/gems/redis-5.3.0/lib/redis.rb:73:in `initialize'# /usr/local/bundle/gems/database_cleaner-redis-2.0.0/lib/database_cleaner/redis/deletion.rb:43:in `new'# /usr/local/bundle/gems/database_cleaner-redis-2.0.0/lib/database_cleaner/redis/deletion.rb:43:in `connection'# /usr/local/bundle/gems/database_cleaner-redis-2.0.0/lib/database_cleaner/redis/deletion.rb:13:in `clean'# /usr/local/bundle/gems/database_cleaner-core-2.0.1/lib/database_cleaner/cleaner.rb:65:in `clean_with'# ./spec/rails_helper.rb:108:in `block (2 levels) in <top (required)>'Deprecation Warnings:Rails 7.1 has deprecated the singular fixture_path in favour of an array.You should migrate to plural:If you need more of the backtrace for any of these deprecations toidentify where to make the necessary changes, you can configure`config.raise_errors_for_deprecations!`, and it will turn thedeprecation warnings into errors, giving you the full backtrace.1 deprecation warning totalFinished in 3.48 seconds (files took 8.72 seconds to load)0 examples, 0 failures, 1 error occurred outside of examples

config/enviroment/test.rb を見ると、以下のように設定されており、

config.cache_store = :redis_cache_store, { url: ENV['REDIS_CACHE_URL'] }

REDIS_CACHE_URLには以下が設定されていました。

`redis://xxxxxxxxxxxxxxxxxxxx_redis:6379/3/`

この末尾のスラッシュを外して再度bundle exec rspec をしました。

Auditedが失敗する

以下のようなエラーが出ます。

config/application.rb

 Psych::DisallowedClass: Tried to load unspecified class: ActiveSupport::TimeWithZone # /usr/local/bundle/gems/audited-5.7.0/lib/audited/audit.rb:22:in `load' # /usr/local/bundle/gems/audited-5.7.0/lib/audited/auditor.rb:366:in `block in write_audit' # /usr/local/bundle/gems/audited-5.7.0/lib/audited/auditor.rb:365:in `write_audit' # /usr/local/bundle/gems/audited-5.7.0/lib/audited/auditor.rb:334:in `audit_create' # /usr/local/bundle/gems/bullet-7.2.0/lib/bullet/active_record61.rb:6:in `_create_record' # /usr/local/bundle/gems/factory_bot-6.4.6/lib/factory_bot/evaluation.rb:15:in `create' # /usr/local/bundle/gems/factory_bot-6.4.6/lib/factory_bot/strategy/create.rb:12:in `block in result' # /usr/local/bundle/gems/factory_bot-6.4.6/lib/factory_bot/strategy/create.rb:9:in `result' # /usr/local/bundle/gems/factory_bot-6.4.6/lib/factory_bot/factory.rb:43:in `run' # /usr/local/bundle/gems/factory_bot-6.4.6/lib/factory_bot/factory_runner.rb:29:in `block in run' # /usr/local/bundle/gems/factory_bot-6.4.6/lib/factory_bot/factory_runner.rb:28:in `run' # /usr/local/bundle/gems/factory_bot-6.4.6/lib/factory_bot/strategy_syntax_method_registrar.rb:28:in `block in define_singular_strategy_method'

auditedのIssueが上がっており、現在対応中の模様。Issue内のコメントにある通り、config/application.rb にyaml_column_permitted_classesを追記する。

config.active_record.yaml_column_permitted_classes = %w[String Integer NilClass Float Time Date FalseClass Hash Array DateTime TrueClass BigDecimal ActiveSupport::TimeWithZone ActiveSupport::TimeZone ActiveSupport::HashWithIndifferentAccess]

Ransackにransackable_attributesが必要

以下のようなエラーが出ます。

 RuntimeError: Ransack needs XXXXXXXXXX attributes explicitly allowlisted as searchable. Define a `ransackable_attributes` class method in your `XXXXXXXXXX` model, watching out for items you DON'T want searchable (for example, `XXXXXXXXXX`, `XXXXXXXXXX`, `XXXXXXXXXX` or other sensitive information). You can use the following as a base:

調べればたくさん対策案が出てきます。今回は以下のコードを挿入して対応しました。

# app/models/application_record.rbclass ApplicationRecord < ActiveRecord::Base # ... def self.ransackable_associations(auth_object = nil) @ransackable_associations ||= reflect_on_all_associations.map { |a| a.name.to_s } end def self.ransackable_attributes(auth_object = nil) @ransackable_attributes ||= column_names + _ransackers.keys + _ransack_aliases.keys + attribute_aliases.keys endend

devise_token_authでundefined method `downcase' が発生

RSpec実行中に以下のエラーが発生

NoMethodError - undefined method `downcase' for nil:NilClass:Started GET "/api/v1/xxxxxxxxxxxxx?yyyy=1" for 127.0.0.1 at 2024-09-10 09:58:44 +0900Processing by Api::V1::XXXXXXXXXXXXXXXXXXX#index as JSON Parameters: {"yyyy"=>"1"}[active_model_serializers] Rendered ActiveModel::Serializer::Null with Hash (0.08ms)Filter chain halted as :authenticate_admin! rendered or redirectedCompleted 401 Unauthorized in 202ms (Views: 3.9ms | ActiveRecord: 0.0ms | Allocations: 335323)

めっちゃ分かりにくいですが、authenticate_admin!をやろうとしていますが、undefined method `downcase' for nil:NilClass:が発生し、401が返っています。cancancanかdevise_token_authの認証認可で失敗しています。

調べるとこちらの記事がヒット

記載の通り、config/initializers/devise_token_auth.rbに1行追加すると解決できました。

config/initializers/devise_token_auth.rb

# Makes it possible to change the headers names config.headers_names = {:'access-token' => 'access-token', :'client' => 'client', :'expiry' => 'expiry', :'uid' => 'uid', :'token-type' => 'token-type', # ↓ここを追加!!! :'authorization' => 'authorization'}

unfが無い

以下のエラーが発生

 Failure/Error: require "unf" LoadError: cannot load such file -- unf

Gemfile.lockの変更履歴を見るとhttp -> http-cookie -> domain_name -> unf の依存関係でたまたま入っていただけだった。domain_nameがバージョンアップに伴いunfを要求しなくなったのでエラーが発生していた

Gemfileに追加して解決

+ gem 'unf'

DateTime.new(0) の戻り値が変わってる

どこかのタイミングで変わったっぽいです。DBのindexを効かせるために、Datetime型の列に対してmigrationでDateTime.new(0)をデフォルト値として使っている個所があり、軒並みRspecが失敗しました。

以前:Sat, 01 Jan 0000 09:18:59.000000000 LMT +09:18最新:Thu, 01 Jan 0000 00:00:00 +0000

Rspecの検査値を固定値に変更して対応しました

- expect(value.datetime_zero).to eq(DateTime.new(0))+ expect(value.datetime_zero.to_s).to eq(DateTime.new(0, 1, 3, 9, 18, 59, "+09:18").to_s)

fixture_file_uploadのパスが変わった

fixture_file_uploadが/app/spec/fixtures/から/app/spec/fixtures/fixtures/になったっぽい。と思ったら、rubocopでRails/FilePathが指摘されるようになり自動修正した結果、発生したエラーでした。

エラー

Failures: Failure/Error: params: { file: fixture_file_upload('files/aaa.zip', 'application/zip') }, ArgumentError: the directory '/app/spec/fixtures/fixtures/' does not contain a file named 'files/aaa.zip'

rubocop自動変換された箇所(spec/rails_helper.rb)

- config.fixture_path = "#{::Rails.root}/spec/fixtures"- config.file_fixture_path = "#{::Rails.root}/spec/fixtures"+ config.fixture_path = "#{Rails.root.join('spec', 'fixtures', 'fixtures')}"+ config.file_fixture_path = "#{Rails.root.join('spec', 'fixtures', 'fixtures')}"

DateTime#to_sでWARNINGがでる

RSpecを実行すると以下のWARNINGがでました。詳細は以下の記事より。ただし、Rails 7.1系までアップロードすると解決できます。今回は7.1.4にしたので解決できました。

DEPRECATION WARNING: Using a :default format for DateTime#to_s is deprecated. Please use DateTime#to_fs instead. If you fixed all places inside your application that you see this deprecation, you can set `ENV['RAILS_DISABLE_DEPRECATED_TO_S_CONVERSION']` to `"true"` in the `config/application.rb` file before the `Bundler.require` call to fix all the callers outside of your application.

psych::disallowedclass「tried to dump unspecified class」 が出る

psychのバージョンを下げて対応

DEPRECATION WARNING: Setting action_dispatch.show_exceptions to false is deprecated. Set to :none instead. が出る

以下の記事の通りです。Rails 7.1系からaction_dispatch.show_exceptions = falseは非推奨になりました。同様の動作をするのは:noneですが、以下の記事の通り、:rescuableをrailsは推奨しています。ここでは、Rspecの結果に影響がなかったため、:rescuableを指定しました。

Calling DidYouMean::SPELL_CHECKERS.merge!(error_name => spell_checker)' has been deprecated. Please call DidYouMean.correct_error(error_name, spell_checker)' instead. が出る

bundle update --bundler を実行すればよい

DEPRECATION WARNING: Support for config.active_support.cache_format_version = 6.1 has been deprecated and will be removed in Rails 7.2.がでる

production.logが出力されない

rails app:updateで更新した設定ファイルの中に以下が追加されていた。削除して完了

- # Log to STDOUT by default- config.logger = ActiveSupport::Logger.new(STDOUT)-  .tap { |logger| logger.formatter = ::Logger::Formatter.new }-  .then { |logger| ActiveSupport::TaggedLogging.new(logger) }
Ruby 3.0.4 -> 3.2.2、Rails 6.1.0 -> 7.1.4の作業ログ - Qiita (2025)
Top Articles
Latest Posts
Recommended Articles
Article information

Author: Dan Stracke

Last Updated:

Views: 5311

Rating: 4.2 / 5 (43 voted)

Reviews: 90% of readers found this page helpful

Author information

Name: Dan Stracke

Birthday: 1992-08-25

Address: 2253 Brown Springs, East Alla, OH 38634-0309

Phone: +398735162064

Job: Investor Government Associate

Hobby: Shopping, LARPing, Scrapbooking, Surfing, Slacklining, Dance, Glassblowing

Introduction: My name is Dan Stracke, I am a homely, gleaming, glamorous, inquisitive, homely, gorgeous, light person who loves writing and wants to share my knowledge and understanding with you.