Я обновляю приложение с очень старого Ruby on Rails до Ruby 3.2.4 с Rails 7.1.3.2. У меня возникли проблемы с использованием :active_record для хранилища сеансов, поэтому я вернулся к основам и создал приложение блога, как описано в руководстве по Ruby. Когда я ввожу инициализатор для использования рельсов :active_record, сразу выдается ошибка.
Я использую Ubuntu 22.04.
Вот мой Gemfile с удаленными комментариями
source "https://rubygems.org"
ruby "3.2.4"
gem "rails", "~> 7.1.3", ">= 7.1.3.2"
gem "sprockets-rails"
gem "sqlite3", "~> 1.4"
gem "puma", ">= 5.0"
gem "importmap-rails"
gem "turbo-rails"
gem "stimulus-rails"
gem "jbuilder"
gem "tzinfo-data", platforms: %i[ windows jruby ]
gem "bootsnap", require: false
gem 'activerecord-session_store', github: 'rails/activerecord-session_store'
group :development, :test do
gem "debug", platforms: %i[ mri windows ]
end
group :development do
gem "web-console"
end
group :test do
gem "capybara"
gem "selenium-webdriver"
end
Вот инициализатор
Rails.application.config.session_store :active_record
Когда я бегу
bundle exec rails generate active_record:session_migration
Я получаю следующую трассировку стека
/home/sysadmin/.rbenv/versions/3.2.4/lib/ruby/gems/3.2.0/gems/actionpack-7.1.3.2/lib/action_dispatch/middleware/stack.rb:42:in `build': undefined method `new' for ActiveRecord:Module (NoMethodError)
klass.new(app, *args, &block)
^^^^
from /home/sysadmin/.rbenv/versions/3.2.4/lib/ruby/gems/3.2.0/gems/actionpack-7.1.3.2/lib/action_dispatch/middleware/stack.rb:171:in `block in build'
from /home/sysadmin/.rbenv/versions/3.2.4/lib/ruby/gems/3.2.0/gems/actionpack-7.1.3.2/lib/action_dispatch/middleware/stack.rb:167:in `each'
from /home/sysadmin/.rbenv/versions/3.2.4/lib/ruby/gems/3.2.0/gems/actionpack-7.1.3.2/lib/action_dispatch/middleware/stack.rb:167:in `inject'
from /home/sysadmin/.rbenv/versions/3.2.4/lib/ruby/gems/3.2.0/gems/actionpack-7.1.3.2/lib/action_dispatch/middleware/stack.rb:167:in `build'
from /home/sysadmin/.rbenv/versions/3.2.4/lib/ruby/gems/3.2.0/gems/railties-7.1.3.2/lib/rails/engine.rb:522:in `block in app'
from /home/sysadmin/.rbenv/versions/3.2.4/lib/ruby/gems/3.2.0/gems/railties-7.1.3.2/lib/rails/engine.rb:518:in `synchronize'
from /home/sysadmin/.rbenv/versions/3.2.4/lib/ruby/gems/3.2.0/gems/railties-7.1.3.2/lib/rails/engine.rb:518:in `app'
from /home/sysadmin/.rbenv/versions/3.2.4/lib/ruby/gems/3.2.0/gems/railties-7.1.3.2/lib/rails/application/finisher.rb:58:in `block in <module:Finisher>'
from /home/sysadmin/.rbenv/versions/3.2.4/lib/ruby/gems/3.2.0/gems/railties-7.1.3.2/lib/rails/initializable.rb:32:in `instance_exec'
from /home/sysadmin/.rbenv/versions/3.2.4/lib/ruby/gems/3.2.0/gems/railties-7.1.3.2/lib/rails/initializable.rb:32:in `run'
from /home/sysadmin/.rbenv/versions/3.2.4/lib/ruby/gems/3.2.0/gems/railties-7.1.3.2/lib/rails/initializable.rb:61:in `block in run_initializers'
from /home/sysadmin/.rbenv/versions/3.2.4/lib/ruby/3.2.0/tsort.rb:228:in `block in tsort_each'
from /home/sysadmin/.rbenv/versions/3.2.4/lib/ruby/3.2.0/tsort.rb:350:in `block (2 levels) in each_strongly_connected_component'
from /home/sysadmin/.rbenv/versions/3.2.4/lib/ruby/3.2.0/tsort.rb:431:in `each_strongly_connected_component_from'
from /home/sysadmin/.rbenv/versions/3.2.4/lib/ruby/3.2.0/tsort.rb:349:in `block in each_strongly_connected_component'
from /home/sysadmin/.rbenv/versions/3.2.4/lib/ruby/3.2.0/tsort.rb:347:in `each'
from /home/sysadmin/.rbenv/versions/3.2.4/lib/ruby/3.2.0/tsort.rb:347:in `call'
from /home/sysadmin/.rbenv/versions/3.2.4/lib/ruby/3.2.0/tsort.rb:347:in `each_strongly_connected_component'
from /home/sysadmin/.rbenv/versions/3.2.4/lib/ruby/3.2.0/tsort.rb:226:in `tsort_each'
from /home/sysadmin/.rbenv/versions/3.2.4/lib/ruby/3.2.0/tsort.rb:205:in `tsort_each'
from /home/sysadmin/.rbenv/versions/3.2.4/lib/ruby/gems/3.2.0/gems/railties-7.1.3.2/lib/rails/initializable.rb:60:in `run_initializers'
from /home/sysadmin/.rbenv/versions/3.2.4/lib/ruby/gems/3.2.0/gems/railties-7.1.3.2/lib/rails/application.rb:426:in `initialize!'
from /mnt/hgfs/legalfirst/websites/dev/blog/config/environment.rb:5:in `<main>'
from <internal:/home/sysadmin/.rbenv/versions/3.2.4/lib/ruby/site_ruby/3.2.0/rubygems/core_ext/kernel_require.rb>:37:in `require'
from <internal:/home/sysadmin/.rbenv/versions/3.2.4/lib/ruby/site_ruby/3.2.0/rubygems/core_ext/kernel_require.rb>:37:in `require'
from /home/sysadmin/.rbenv/versions/3.2.4/lib/ruby/gems/3.2.0/gems/bootsnap-1.18.3/lib/bootsnap/load_path_cache/core_ext/kernel_require.rb:30:in `require'
from /home/sysadmin/.rbenv/versions/3.2.4/lib/ruby/gems/3.2.0/gems/zeitwerk-2.6.13/lib/zeitwerk/kernel.rb:34:in `require'
from /home/sysadmin/.rbenv/versions/3.2.4/lib/ruby/gems/3.2.0/gems/railties-7.1.3.2/lib/rails/application.rb:402:in `require_environment!'
from /home/sysadmin/.rbenv/versions/3.2.4/lib/ruby/gems/3.2.0/gems/railties-7.1.3.2/lib/rails/command/actions.rb:20:in `boot_application!'
from /home/sysadmin/.rbenv/versions/3.2.4/lib/ruby/gems/3.2.0/gems/railties-7.1.3.2/lib/rails/commands/generate/generate_command.rb:21:in `perform'
from /home/sysadmin/.rbenv/versions/3.2.4/lib/ruby/gems/3.2.0/gems/thor-1.3.1/lib/thor/command.rb:28:in `run'
from /home/sysadmin/.rbenv/versions/3.2.4/lib/ruby/gems/3.2.0/gems/thor-1.3.1/lib/thor/invocation.rb:127:in `invoke_command'
from /home/sysadmin/.rbenv/versions/3.2.4/lib/ruby/gems/3.2.0/gems/railties-7.1.3.2/lib/rails/command/base.rb:178:in `invoke_command'
from /home/sysadmin/.rbenv/versions/3.2.4/lib/ruby/gems/3.2.0/gems/thor-1.3.1/lib/thor.rb:527:in `dispatch'
from /home/sysadmin/.rbenv/versions/3.2.4/lib/ruby/gems/3.2.0/gems/railties-7.1.3.2/lib/rails/command/base.rb:73:in `perform'
from /home/sysadmin/.rbenv/versions/3.2.4/lib/ruby/gems/3.2.0/gems/railties-7.1.3.2/lib/rails/command.rb:71:in `block in invoke'
from /home/sysadmin/.rbenv/versions/3.2.4/lib/ruby/gems/3.2.0/gems/railties-7.1.3.2/lib/rails/command.rb:149:in `with_argv'
from /home/sysadmin/.rbenv/versions/3.2.4/lib/ruby/gems/3.2.0/gems/railties-7.1.3.2/lib/rails/command.rb:69:in `invoke'
from /home/sysadmin/.rbenv/versions/3.2.4/lib/ruby/gems/3.2.0/gems/railties-7.1.3.2/lib/rails/commands.rb:18:in `<main>'
from <internal:/home/sysadmin/.rbenv/versions/3.2.4/lib/ruby/site_ruby/3.2.0/rubygems/core_ext/kernel_require.rb>:37:in `require'
from <internal:/home/sysadmin/.rbenv/versions/3.2.4/lib/ruby/site_ruby/3.2.0/rubygems/core_ext/kernel_require.rb>:37:in `require'
from /home/sysadmin/.rbenv/versions/3.2.4/lib/ruby/gems/3.2.0/gems/bootsnap-1.18.3/lib/bootsnap/load_path_cache/core_ext/kernel_require.rb:30:in `require'
from bin/rails:4:in `<main>'
Может кто-нибудь сказать мне, как настроить Rails 7.1.3 для использования :active_record для хранения сеансов. Рефакторинг моего приложения, чтобы он не использовал :active_record, потребует много работы.
Вот и все! Спасибо — я использовал Rails.application.config.session_store :active_record, потому что видел это в других сообщениях о Rails 7.1. Если вы опубликуете свой комментарий в качестве ответа, я могу принять его и проголосовать за него.
Имя конфигурации изменилось, когда активное хранилище записей было извлечено в драгоценный камень:
Rails.application.config.session_store :active_record_store, :key => "_my_app_session"
https://github.com/rails/activerecord-session_store#installation
Спасибо, Алекс, я сделал это до того, как получил трассировку стека.