3

エラーメッセージは次のとおりです。

/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'
4

6 に答える 6

10

やや複雑なプロジェクトで同様の問題を解決しました。直接関係があるかどうかはわかりませんが、問題をデバッグする方法が役立つ可能性があるため、これを投稿しています。

私の場合、次のシナリオがありました。

  • この状況は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

productionこうすることで、Rails は私が思っていたようにエントリを探していないことに気付きました。という別のエントリを探していましたabc_production。これは、以前に言及した複数のデータベース接続のために、私のプロジェクトで必要でした。その特定のサーバーで、誰かがそのabc_productionエントリをに追加するのを忘れていましたdatabase.yml。エントリを追加すると問題が解決しました。

RAILS_ENV=productionこれenvironments/production.rbは、 Railsconfig.eager_load = trueがアプリケーションとクラスをメモリに熱心にロードし、おそらくそれらのクラス (そのうちの 1 つがabc_production) で定義されているすべてのデータベース接続を確立しようとすることを意味します。

これが同様の状況の誰かに役立つことを願っています...複数の接続を使用していない場合は、変更して問題をデバッグし、connection_specification.rbそれがあなたに何らかの手掛かりを与えるかどうかを確認してください..

于 2013-10-17T20:26:15.540 に答える
6

私は今、あなたがやろうとしたことを正確には知りませんが.

現在、Ruby-2.10 で < rails c -e production > を実行しようとしたのと同じエラーが発生しました。

`resolve_hash_connection': データベース構成でアダプターが指定されていません (ActiveRecord::AdapterNotSpecified)

< rails c production >を実行すると、すべてが機能します。

多分これは誰かを助ける

于 2014-01-28T21:00:39.063 に答える
0

私もこの問題に遭遇しました。見つけることができる同様の質問をすべて試しましたが、どれも問題を解決しなかったため、database.yml から読み取った構成システムを印刷しようとしました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}

だから私の問題は、データベースに何か問題があるということです.ymlはYAML解析エラーを引き起こします。ただし、肉眼では何も問題がないため、別のサーバーからファイルをコピーして問題を解決しました。

これが誰かを助けることを願っています:p

于 2014-12-24T06:39:07.547 に答える
0

サンプル データベース構成の要旨を作成しました。必ず使用してください。要点は次の場所にあります: https://gist.github.com/fidalgo/5970617

また、必ず rakedb:setupを実行してデータベースをセットアップしてください。

また、あなたの環境では本番環境とテストにも Sqlite を使用しているため、Gemfile で次の行を変更します。

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

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

開発以外の環境を使用している場合を除いて、大きな違いはありません。

于 2013-07-10T21:51:35.697 に答える