You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Rails5.2升级至6.1后PostGISDatabaseTasks变量未定义错误求助

问题:Rails 5.2升级至6.1后Docker启动时PostGISDatabaseTasks报错

核心错误

undefined local variable or method `configuration' for #<ActiveRecord::ConnectionAdapters::PostGIS::PostGISDatabaseTasks:0x0000555b2c8f5ac0>
Did you mean?  configuration_hash

完整错误栈

wait-for-it.sh: postgresql:5432 is available after 0 seconds
undefined local variable or method `configuration' for #<ActiveRecord::ConnectionAdapters::PostGIS::PostGISDatabaseTasks:0x0000555b2c8f5ac0>
Did you mean?  configuration_hash
Couldn't create 'app' database. Please check your configuration.
rake aborted!
NameError: undefined local variable or method `configuration' for #<ActiveRecord::ConnectionAdapters::PostGIS::PostGISDatabaseTasks:0x0000555b2c8f5ac0>
Did you mean?  configuration_hash
/bundle/ruby/2.7.0/gems/activerecord-postgis-adapter-6.0.1/lib/active_record/connection_adapters/postgis/postgis_database_tasks.rb:99:in `ensure_installation_configs'
/bundle/ruby/2.7.0/gems/activerecord-postgis-adapter-6.0.1/lib/active_record/connection_adapters/postgis/postgis_database_tasks.rb:9:in `initialize'
/bundle/ruby/2.7.0/gems/activerecord-6.1.7.2/lib/active_record/tasks/database_tasks.rb:487:in `new'
/bundle/ruby/2.7.0/gems/activerecord-6.1.7.2/lib/active_record/tasks/database_tasks.rb:487:in `database_adapter_for'
/bundle/ruby/2.7.0/gems/activerecord-6.1.7.2/lib/active_record/tasks/database_tasks.rb:133:in `create'
/bundle/ruby/2.7.0/gems/activerecord-6.1.7.2/lib/active_record/tasks/database_tasks.rb:193:in `block in create_current'
/bundle/ruby/2.7.0/gems/activerecord-6.1.7.2/lib/active_record/tasks/database_tasks.rb:506:in `block (2 levels) in each_current_configuration'
/bundle/ruby/2.7.0/gems/activerecord-6.1.7.2/lib/active_record/tasks/database_tasks.rb:503:in `each'
/bundle/ruby/2.7.0/gems/activerecord-6.1.7.2/lib/active_record/tasks/database_tasks.rb:503:in `block in each_current_configuration'
/bundle/ruby/2.7.0/gems/activerecord-6.1.7.2/lib/active_record/tasks/database_tasks.rb:502:in `each'
/bundle/ruby/2.7.0/gems/activerecord-6.1.7.2/lib/active_record/tasks/database_tasks.rb:502:in `each_current_configuration'
/bundle/ruby/2.7.0/gems/activerecord-6.1.7.2/lib/active_record/tasks/database_tasks.rb:193:in `create_current'
/bundle/ruby/2.7.0/gems/activerecord-6.1.7.2/lib/active_record/railties/databases.rake:45:in `block (2 levels) in <top (required)>'
/bundle/ruby/2.7.0/gems/bugsnag-6.24.2/lib/bugsnag/integrations/rake.rb:20:in `execute'
/bundle/ruby/2.7.0/gems/rake-13.0.6/exe/rake:27:in `<top (required)>'
/usr/local/bundle/gems/bundler-2.4.6/lib/bundler/cli/exec.rb:58:in `load'
/usr/local/bundle/gems/bundler-2.4.6/lib/bundler/cli/exec.rb:58:in `kernel_load'
/usr/local/bundle/gems/bundler-2.4.6/lib/bundler/cli/exec.rb:23:in `run'
/usr/local/bundle/gems/bundler-2.4.6/lib/bundler/cli.rb:491:in `exec'
/usr/local/bundle/gems/bundler-2.4.6/lib/bundler/vendor/thor/lib/thor/command.rb:27:in `run'
/usr/local/bundle/gems/bundler-2.4.6/lib/bundler/vendor/thor/lib/thor/invocation.rb:127:in `invoke_command'
/usr/local/bundle/gems/bundler-2.4.6/lib/bundler/vendor/thor/lib/thor.rb:392:in `dispatch'
/usr/local/bundle/gems/bundler-2.4.6/lib/bundler/cli.rb:34:in `dispatch'
/usr/local/bundle/gems/bundler-2.4.6/lib/bundler/vendor/thor/lib/thor/base.rb:485:in `start'
/usr/local/bundle/gems/bundler-2.4.6/lib/bundler/cli.rb:28:in `start'
/usr/local/bundle/gems/bundler-2.4.6/exe/bundle:45:in `block in <top (required)>'
/usr/local/bundle/gems/bundler-2.4.6/lib/bundler/friendly_errors.rb:117:in `with_friendly_errors'
/usr/local/bundle/gems/bundler-2.4.6/exe/bundle:33:in `<top (required)>'
/usr/local/bundle/bin/bundle:23:in `load'
/usr/local/bundle/bin/bundle:23:in `<main>'

当前Gemfile配置

source 'https://rubygems.org'

ruby '~> 2.7'

gem 'pg', '~> 1.2', '>= 1.2.3'
gem 'rails', '~> 6.1.7' , '>= 6.1.7.1'
gem 'responders', '~> 3.0', '>= 3.0.1'

gem 'actionpack-action_caching', '~> 1.2', '>= 1.2.1'
gem 'activerecord-postgis-adapter', '~> 6.0', '>= 6.0.1'
gem 'addressfinder'
gem 'aws-sdk-s3'
gem 'aws-sdk-dynamodb'
gem 'bugsnag'
gem 'cancan'
gem 'clearance', '~> 2.5.0'
gem 'coffee-rails'
gem 'dynamic_form'
gem 'easy_reference_data', '~> 1.1'
gem 'ejs', '~> 1.0.0'
gem 'friendly_id'
gem 'jquery-rails', '~> 4.4'
gem 'mapkit'
gem 'mime-types', require: 'mime/types'
gem 'newrelic_rpm'
gem 'nokogiri', '>= 1.13.2'
gem 'paperclip'
gem 'puma', '>= 5.6.2'
gem 'rails_12factor'
gem 'rgeo', '~> 2.2'
gem 'rgeo-geojson', '~> 2.1', '>= 2.1.1'
gem 'rinku', '~> 1.5.1', require: 'rails_rinku'
gem 'sass-rails'
gem 'therubyracer'
gem 'uglifier', '>= 1.0.3'
gem 'will_paginate'
gem "whenever", "~> 1.0"
gem "net-http"
gem 'uri', '0.12.0'

group :foreman do
  gem 'foreman'
end

group :test do
  gem 'database_cleaner', '~> 1.99.0'
  gem 'factory_bot_rails'
  gem 'guard-minitest'
  gem 'guard-rspec', require: false
  gem 'minitest'
  gem 'mocha', require: false
  gem 'shoulda'
end

group :development, :test do
  gem 'bundler-audit'
  gem 'byebug'
  gem 'license_finder'
  gem 'pry'
  gem 'pry-nav'
  gem 'pry-remote'
  gem 'rails-controller-testing'
  gem 'rspec-rails', '~> 3.8'
end

解决方案

1. 升级activerecord-postgis-adapter版本

当前使用的activerecord-postgis-adapter 6.0.1仅适配Rails 6.0,与Rails 6.1的数据库任务API不兼容。Rails 6.1中数据库任务类的configuration变量被替换为configuration_hash,旧版本adapter仍在调用configuration导致报错。

修改Gemfile中的adapter版本为适配Rails 6.1的版本:

gem 'activerecord-postgis-adapter', '~> 6.1'

2. 重新构建Docker镜像并启动

Gemfile修改后,需重新安装依赖并构建镜像:

docker compose build
docker compose up

3. 验证数据库创建

若之前数据库创建失败,可手动执行初始化命令确认问题解决:

docker compose run web bundle exec rake db:create db:migrate

内容的提问来源于stack exchange,提问作者Y.H

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.31 19:50:17