以下是错误消息:
/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文件:
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:
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'
答案 0 :(得分:8)
我在一个复杂的项目中解决了类似的问题。不确定它是直接相关的,但我发布这个,因为调试问题的方式可能会有所帮助。
就我而言,我有以下情况:
RAILS_ENV=production
。当我做RAILS_ENV=development
它有效。奇怪的是,当我将production
中的database.yml
条目更改为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
(或者回溯告诉你问题的地方)。
然后,我在代码中找到了包含这些行的位置:
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并没有像我想象的那样寻找production
条目。它正在寻找一个名为abc_production
的不同条目,由于我之前提到的多个数据库连接,这在我的项目中是必需的。在该特定服务器上,有人忘记将abc_production
条目添加到database.yml
。添加条目解决了这个问题。
我认为它只发生在RAILS_ENV=production
时,因为在environments/production.rb
我有config.eager_load = true
,这意味着Rails会急切地将应用程序和类加载到内存中,并可能尝试建立所有数据库在这些类中定义的连接(其中一个是abc_production
)。
希望这可以帮助处于类似情况的人...如果您没有使用多个连接,请尝试通过更改connection_specification.rb
来调试问题并查看它是否为您提供任何潜在客户..
答案 1 :(得分:6)
我现在不是你想要做的事情,但是。
目前我遇到了与我试图运行相同的错误&lt; rails c -e production&gt;用ruby-2.10。
`resolve_hash_connection':数据库配置未指定适配器(ActiveRecord :: AdapterNotSpecified)
因为我跑&lt; rails c production&gt;一切正常。
也许这有助于某人
答案 2 :(得分:1)
我在登台环境中遇到了类似问题,我做了:
之后它在那里工作得很好。
答案 3 :(得分:0)
我已经给出了一个带有示例数据库配置的要点,请确保您使用它。 要点位于:https://gist.github.com/fidalgo/5970617
还要确保运行rake db:setup
来设置数据库。
此外,在您的环境中,您也使用Sqlite进行生产和测试,在Gemfile中更改以下行:
group :development, :test do
gem 'sqlite3'
end
到
#group :development, :test do
gem 'sqlite3'
#end
除了使用除开发之外的其他环境之外,它不应该有任何显着差异。
答案 4 :(得分:0)
我也遇到了这个问题。我尝试了所有我能找到的类似问题,但没有一个解决了我的问题,然后我尝试打印配置系统从activerecord-3.2.13/lib/active_record/connection_adapters/abstract/connection_specification.rb
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}
所以我的问题是在database.yml中出现了错误导致YAML解析错误。但是我的裸眼没有发现任何问题所以我从另一台服务器复制了一个文件然后解决了问题。
希望这可以帮助某人:p
答案 5 :(得分:0)
意识到这有点老了,但刚刚在寻找类似问题的答案时遇到过。只是想指出你的.yml中仍然有sqlite3作为你的适配器。正如您可能已经发现的那样,Heroku不允许sqlite3作为生产数据库。 SQLite on Heroku