Ruby on rails Rails数据库配置未指定适配器。我该怎么办?
以下是错误消息:Ruby on rails Rails数据库配置未指定适配器。我该怎么办?,ruby-on-rails,ruby,database,Ruby On Rails,Ruby,Database,以下是错误消息: /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/activereco
/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>'
我的档案:
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'
我已经用一个示例数据库配置包装了一个gist,请确保您使用它。 摘要载于: 还要确保运行rake
db:setup
来设置数据库
另外,由于在您的环境中,您也在使用Sqlite进行生产和测试,因此在您的Gemfile中更改以下行:
group :development, :test do
gem 'sqlite3'
end
到
它不应该有任何显著的区别,除非您使用的是开发以外的其他环境 我在一个有点复杂的项目中解决了一个类似的问题。不确定这是否有直接关系,但我发布这篇文章是因为调试问题的方法可能会有所帮助 在我的案例中,我有以下场景:
- 只有在
时才会出现这种情况。当我做RAILS\u ENV=production
时,它起了作用。奇怪的是,当我将RAILS\u ENV=development
中的database.yml
条目更改为production
并使用production2
运行命令时,它起了作用RAILS\u ENV=production2
- 在这个项目中,我通过各种模型和库连接到多个数据库连接
vim/Users/davidzabner/.rvm/gems/ruby-1.9.3-p448/gems/activerecord-3.2.13/lib/active\u record/connection\u adapters/abstract/connection\u specification.rb
(或者无论回溯告诉您问题在哪里)
然后,我在代码中找到了包含以下行的位置:
def resolve_hash_connection(spec) # :nodoc:
spec = spec.symbolize_keys
raise(AdapterNotSpecified, "database configuration does not specify adapter") unless spec.key?(:adapter)
并将其更改为以下内容:
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并不像我想象的那样寻找产品条目。它正在寻找一个名为abc_production
的不同条目,这是我的项目所必需的,因为我前面提到了多个数据库连接。在那个特定的服务器上,有人忘了将abc\u production
条目添加到database.yml
。添加条目解决了这个问题
我相信只有在RAILS\u ENV=production
时才会发生这种情况,因为在environments/production.rb
中,我有config.eager\u load=true
,这意味着RAILS将急切地将应用程序和类加载到内存中,并可能尝试建立在这些类中定义的所有数据库连接(其中一个是abc_生产
)
希望这对处于类似情况的人有所帮助…如果您没有使用多个连接,请尝试通过更改connection\u specification.rb来调试该问题,并查看它是否为您提供了任何线索。我现在不知道您到底想做什么,但是
目前,我在尝试使用ruby-2.10运行时遇到了相同的错误
`解析\u散列\u连接”:数据库配置未指定适配器(ActiveRecord::AdapterNotSpecified)
当我运行时,一切正常
也许这对某些人有帮助我在登台环境中遇到了类似的问题,我确实遇到了:
在designe.rb初始值设定项文件中添加了designe secret
在secrets.yml中配置了暂存“secret\u key\u base”
我也遇到了这个问题。我尝试了所有我能找到的类似问题,但没有一个解决了我的问题,然后我尝试在activerecord-3.2.13/lib/active\u record/connection\u adapters/abstract/connection\u specification.rb中打印系统从database.yml读取的配置
def resolve_string_connection(spec) # :nodoc:
hash = configurations.fetch(spec) do |k|
connection_url_to_hash(k)
end
p configurations
p spec
raise(AdapterNotSpecified, "#{spec} database is not configured") unless hash
resolve_hash_connection hash
end
输出是
{"production"=>nil, " adapter"=>"mysql2", " encoding"=>"utf8mb4", " username"=>"myUsername", " password"=>"myPassword", " pool"=>5, " database"=>"mydb", " host"=>"myHost", " port"=>3306, "mydb_production"=>nil}
所以我的问题是数据库中有错误。yml导致YAML解析错误。但是我肉眼没有发现任何错误,所以我从另一台服务器复制了一个文件,然后问题解决了
希望这能帮助某人:p意识到这有点陈旧,但在寻找类似问题的答案时遇到了。只是想指出,您的.yml中仍然有sqlite3作为适配器。正如您可能已经发现的那样,Heroku不允许sqlite3作为生产数据库。看起来您没有这样做在所有的错误消息中都是y?请给我们看gem
文件。没有换行符,您的数据库配置就是这样吗?如果是,那肯定是您的问题。@Douglasfshear它只是格式化,我编辑了它。您能评估Rails.env
并在这里报告吗?例如,放置一个“在环境.rb
中抛出Rails.env
?在数据库中未定义的(自定义)环境中运行Rails时,通常会发生这些错误。yml。这些都没有帮助。感谢您的尝试。这可以确定调用的环境,并帮助我解决问题。谢谢!
def resolve_string_connection(spec) # :nodoc:
hash = configurations.fetch(spec) do |k|
connection_url_to_hash(k)
end
p configurations
p spec
raise(AdapterNotSpecified, "#{spec} database is not configured") unless hash
resolve_hash_connection hash
end
{"production"=>nil, " adapter"=>"mysql2", " encoding"=>"utf8mb4", " username"=>"myUsername", " password"=>"myPassword", " pool"=>5, " database"=>"mydb", " host"=>"myHost", " port"=>3306, "mydb_production"=>nil}