首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >Rails数据库配置未指定适配器。我做什么好?

Rails数据库配置未指定适配器。我做什么好?
EN

Stack Overflow用户
提问于 2013-07-11 03:10:04
回答 6查看 16.2K关注 0票数 3

以下是错误消息:

代码语言:javascript
运行
复制
/Users/davidzabner/.rvm/gems/ruby-1.9.3-p448/gems/activerecord-3.2.13/lib/active_record/connection_adapters/abstract/connection_specification.rb:47:in `resolve_hash_connection'
    /Users/davidzabner/.rvm/gems/ruby-1.9.3-p448/gems/activerecord-3.2.13/lib/active_record/connection_adapters/abstract/connection_specification.rb:41:in `resolve_string_connection'
    ...
    /Users/davidzabner/.rvm/gems/ruby-1.9.3-p448/gems/railties-3.2.13/lib/rails/application.rb:103:in `require_environment!'
    /Users/davidzabner/.rvm/gems/ruby-1.9.3-p448/gems/railties-3.2.13/lib/rails/application.rb:297:in `block (2 levels) in initialize_tasks'
    /Users/davidzabner/.rvm/gems/ruby-1.9.3-p448/bin/ruby_noexec_wrapper:14:in `eval'
    /Users/davidzabner/.rvm/gems/ruby-1.9.3-p448/bin/ruby_noexec_wrapper:14:in `<main>'

我的database.yml文件:

代码语言:javascript
运行
复制
development:
  adapter: sqlite3
  database: db/development.sqlite3
  pool: 5
  timeout: 5000

test:
  adapter: sqlite3
  database: db/test.sqlite3
  pool: 5
  timeout: 5000

production:
  adapter: sqlite3
  database: db/production.sqlite3
  pool: 5
  timeout: 5000

我的Gemfile:

代码语言:javascript
运行
复制
source 'https://rubygems.org'

gem "therubyracer"
gem "less-rails" #Sprockets (what Rails 3.1 uses for its asset pipeline) supports LESS
gem "twitter-bootstrap-rails"
gem 'jquery-rails'
gem 'devise'

gem 'rails', '3.2.13'

# Bundle edge Rails instead:
# gem 'rails', :git => 'git://github.com/rails/rails.git'

group :development, :test do
    gem 'sqlite3'
end

group :production do
    gem 'pg'
end

gem 'mini_magick'
gem "rmagick"
gem "carrierwave"


# Gems used only for assets and not required
# in production environments by default.
group :assets do
  gem 'sass-rails',   '~> 3.2.3'
  gem 'coffee-rails', '~> 3.2.1'

  # See https://github.com/sstephenson/execjs#readme for more supported runtimes
  # gem 'therubyracer', :platforms => :ruby

  gem 'uglifier', '>= 1.0.3'
end

gem 'jquery-rails'

# To use ActiveModel has_secure_password
# gem 'bcrypt-ruby', '~> 3.0.0'

# To use Jbuilder templates for JSON
# gem 'jbuilder'

# Use unicorn as the app server
# gem 'unicorn'

# Deploy with Capistrano
# gem 'capistrano'

# To use debugger
# gem 'debugger'
EN

回答 6

Stack Overflow用户

发布于 2013-10-18 04:26:16

我在一个有点复杂的项目中解决了一个类似的问题。不确定它是否直接相关,但我将此作为调试问题的方法发布,这可能会有所帮助。

在我的例子中,我有以下场景:

  • 这种情况仅在RAILS_ENV=production时发生。当我做RAILS_ENV=development的时候,它起作用了。奇怪的是,当我将database.yml中的production条目更改为production2并使用RAILS_ENV=production2运行该命令时,它起作用了。
  • 在项目中,我通过各种模型和库连接到多个数据库连接。

下面是我用来检测这个问题的方法:

vim /Users/davidzabner/.rvm/gems/ruby-1.9.3-p448/gems/activerecord-3.2.13/lib/active_record/connection_adapters/abstract/connection_specification.rb

(或者回溯告诉你问题所在的地方)。

然后,我在代码中找到了包含以下行的位置:

代码语言:javascript
运行
复制
def resolve_hash_connection(spec) # :nodoc:
  spec = spec.symbolize_keys

  raise(AdapterNotSpecified, "database configuration does not specify adapter") unless spec.key?(:adapter)

并将其更改为:

代码语言:javascript
运行
复制
def resolve_hash_connection(spec) # :nodoc:
  spec = spec.symbolize_keys

  # Debug printing
  puts "*" * 80, spec.inspect, "*" * 80

  raise(AdapterNotSpecified, "database configuration does not specify adapter") unless spec.key?(:adapter)

然后我重新运行命令,在我的例子中是bundle exec rails c production

通过这样做,我意识到Rails并不像我想的那样寻找production条目。它正在寻找一个名为abc_production的不同条目,由于我前面提到的多个数据库连接,因此在我的项目中需要该条目。在该特定服务器上,有人忘记将该abc_production条目添加到database.yml中。添加条目解决了问题。

我相信只有在RAILS_ENV=production时才会发生这种情况,因为在environments/production.rb中我有config.eager_load = true,这意味着Rails会立即将应用程序和类加载到内存中,并可能尝试建立这些类中定义的所有数据库连接(其中一个是abc_production)。

希望这对有类似情况的人有所帮助。如果您没有使用多个连接,请尝试通过更改connection_specification.rb来调试问题,并查看它是否为您提供了线索。

票数 9
EN

Stack Overflow用户

发布于 2014-01-29 05:00:39

我现在不知道你到底想做什么。

目前,当我尝试使用ruby-2.10运行< rails c -e production >时,我得到了相同的错误。

“`resolve_hash_connection”:数据库配置未指定适配器(ActiveRecord::AdapterNotSpecified)

当我运行< rails c production >时,一切都正常。

也许这对某些人有帮助

票数 6
EN

Stack Overflow用户

发布于 2014-05-13 16:43:32

我在staging环境中遇到了类似的问题,我做到了:

  1. 将devise密钥添加到devise.rb初始值设定项file
  2. configured staging 'secret_key_base‘in secrets.yml

之后,我在那里工作得很好。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/17579012

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档