2013-07-10 42 views
3

以下是錯誤消息:Rails數據庫配置沒有指定適配器。我該怎麼辦?

/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' 
+3

它看起來像你沒有複製的所有錯誤信息? –

+0

請向我們展示'gem'文件。 – Boris

+1

這是你的數據庫配置是如何,沒有換行符?如果是的話,那肯定會是你的問題。 –

回答

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 

它不應該作出任何顯著差異,除了你正在使用其他環境而不是開發。

+0

這些都沒有幫助。感謝您的嘗試。 – NW0428

8

我在一個有點複雜的項目中解決了類似的問題。不確定它是直接相關的,但我發佈此作爲調試問題的方式可能會有所幫助。

在我的情況,我有以下情形:

  • 的情況僅發生時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

(或任何回溯告訴你的問題)。

然後,我發現在具有這些行的代碼的地方:

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,看看它是否給你任何鉛調試問題..

+0

這種識別是被稱爲什麼樣的環境,幫助我解決我的問題。謝謝! – John

+0

謝謝,那終於幫我找到了問題!!!!! – Tamar

6

我不現在正是你想要做的,但是。

目前我得到了同樣的錯誤,因爲我試圖運行< rails c -e production> ruby​​-2.10。

`resolve_hash_connection「:我跑<軌Ç生產數據庫配置不指定適配器(ActiveRecord的:: AdapterNotSpecified)

>一切正常。

也許這可以幫助別人

1

我有一個類似的問題與分期環境和我所做的:

  1. 加色器件祕密devise.rb初始化文件
  2. 配置分期「secret_key_base」在secrets.yml

它在那裏工作得很好。

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} 

所以我的問題是,在database.yml中有錯誤導致YAML解析錯誤。然而,我沒有發現任何錯誤的我的裸眼,所以我從另一臺服務器複製文件,然後解決問題。

希望這可以幫助別人:P

0

意識到這是一個有點老了,但剛剛碰到,而尋找的一個類似的問題的答案。只是想指出,你的.yml中仍然有sqlite3作爲你的適配器。正如你可能已經發現,Heroku不允許sqlite3作爲生產分貝。 SQLite on Heroku

相關問題