ActiveRecord :: AdapterNotSpecified数据库配置未指定适配器
当我使用heroku打开我的web应用程序工作正常,但当我使用rails(localhost)时,我遇到了这个错误:
ActiveRecord::AdapterNotSpecified database configuration does not specify adapter
为什么是这样?
这是我的database.yml
# PostgreSQL. Versions 8.2 and up are supported. # # Install the pg driver: # gem install pg # On OS X with Homebrew: # gem install pg -- --with-pg-config=/usr/local/bin/pg_config # On OS X with MacPorts: # gem install pg -- --with-pg-config=/opt/local/lib/postgresql84/bin/pg_config # On Windows: # gem install pg # Choose the win32 build. # Install PostgreSQL and put its /bin directory on your path. # # Configure Using Gemfile # gem 'pg' # default: &default adapter: postgresql encoding: unicode # For details on connection pooling, see rails configuration guide # http://guides.rubyonrails.org/configuring.html#database-pooling pool: 5
这是我的gemfile:
source 'https://rubygems.org' gem 'pg' gem 'bootstrap-sass', '~> 3.1.1' # Bundle edge Rails instead: gem 'rails', github: 'rails/rails' gem 'rails', '4.0.3' # Use SCSS for stylesheets gem 'sass-rails', '~> 4.0.0' # Use Uglifier as compressor for JavaScript assets gem 'uglifier', '>= 1.3.0' # Use CoffeeScript for .js.coffee assets and views gem 'coffee-rails', '~> 4.0.0' # See https://github.com/sstephenson/execjs#readme for more supported runtimes # gem 'therubyracer', platforms: :ruby # Use jquery as the JavaScript library gem 'jquery-rails' # Turbolinks makes following links in your web application faster. Read more: https://github.com/rails/turbolinks gem 'turbolinks' # Build JSON APIs with ease. Read more: https://github.com/rails/jbuilder gem 'jbuilder', '~> 1.2' group :doc do # bundle exec rake doc:rails generates the API under doc/api. gem 'sdoc', require: false end group :production do gem 'rails_12factor', '0.0.2' end # Use ActiveModel has_secure_password # gem 'bcrypt-ruby', '~> 3.1.2' # Use unicorn as the app server # gem 'unicorn' # Use Capistrano for deployment # gem 'capistrano', group: :development # Use debugger # gem 'debugger', group: [:development, :test]
为了让您的应用程序在本地工作,您需要:
- 在您的计算机上安装Postgresql
- 为您的开发需求创建一个数据库 (让我们称之为
my_app_development
) -
将
database.yml
更改为:default: &default adapter: postgresql encoding: unicode # For details on connection pooling, see rails configuration guide # http://guides.rubyonrails.org/configuring.html#database-pooling pool: 5 development: <<: *default database: my_app_development
-
运行
rake db:migrate
您的database.yml应如下所示:
default: &default adapter: postgresql encoding: unicode # For details on connection pooling, see rails configuration guide # http://guides.rubyonrails.org/configuring.html#database-pooling pool: 5 username: my_username password: my_password development: <<: *default database: "development_database_name" test: <<: *default database: "test_database_name" production: <<: *default database: "production_database_name"
将development_database_name编辑为本地数据库名称。 同时将my_username和my_password编辑为正确的db用户名和密码。
您没有显示导致此查询的命令,但如果您传递字符串而不是符号,则可能会发生这种情况。
例如:
irb(main):001:0> ActiveRecord::Base.establish_connection("#{Rails.env}") ActiveRecord::AdapterNotSpecified: database configuration does not specify adapter
但是如果你使用符号,它就会起作用。
irb(main):001:0> ActiveRecord::Base.establish_connection("#{Rails.env}".to_sym) => #
不再删除标签,完美标识,例如:
# PostgreSQL. Versions 8.2 and up are supported. # # Install the pg driver: # gem install pg # On OS X with Homebrew: # gem install pg -- --with-pg-config=/usr/local/bin/pg_config # On OS X with MacPorts: # gem install pg -- --with-pg-config=/opt/local/lib/postgresql84/bin/pg_config # On Windows: # gem install pg # Choose the win32 build. # Install PostgreSQL and put its /bin directory on your path. # # Configure Using Gemfile # gem 'pg' # default: &default adapter: postgresql encoding: utf8 pool: 5 host: 192.168.0.121 username: postgres password: passpostgres development: <<: *default database: DBPOSTGRES # Warning: The database defined as "test" will be erased and # re-generated from your development database when you run "rake". # Do not set this db to the same as development or production. test: <<: *default database: DBPOSTGRES # As with config/secrets.yml, you never want to store sensitive information, # like your database password, in your source code. If your source code is # ever seen by anyone, they now have access to your database. # # Instead, provide the password as a unix environment variable when you boot # the app. Read http://guides.rubyonrails.org/configuring.html#configuring-a-database # for a full rundown on how to provide these environment variables in a # production deployment. # # On Heroku and other platform providers, you may have a full connection URL # available as an environment variable. For example: # # DATABASE_URL="postgres://myuser:mypass@localhost/somedatabase" # # You can use this database configuration with: # # production: # url: <%= ENV['DATABASE_URL'] %> # production: <<: *default database: DBPOSTGRES password: <%= ENV['passpostgres'] %>
为什么在database.yml
使用yml节点引用 ?
你应该有这样的事情:
#config/database.yml development: adapter: mysql2 encoding: utf8 database: **** pool: 5 username: **** password: **** host: ***.***.***.*** #-> only for third party db server production: adapter: postgresql encoding: utf8 database: **** pool: 5 username: **** password: **** host: ***.***.***.*** #-> only for third party db server
更新
Rails使用数据库运行。 您必须连接到数据库才能使其正常工作,为此,您必须在database.yml
定义不同的连接详细信息
要定义正确的信息,您需要了解Rails在多个environments
– development
和production
是最常用的两个environments
要使Rails在本地(开发)环境中工作,您需要定义正确的数据库详细信息。 这意味着您需要一个数据库来连接 – 这通常是设置本地mysql / pgsql服务器
底线是您使用以下命令连接到数据库:
- 主机名
- 用户名
- 密码
- 数据库名称
您需要在config/database.yml
文件中定义它们
如果您在本地环境中运行服务器,则database.yml文件将如下所示:
#config/database.yml development: adapter: mysql2 encoding: utf8 database: db_name pool: 5 username: username password: password
如果你试图在没有rails的情况下使用activerecord,你可能会遇到带有多个环境设置的database.yml这个问题。 因此,您需要将环境密钥传递到配置设置中,如下所示:
DB_ENV ||= 'development' connection_details = YAML::load(File.open('config/database.yml')) ActiveRecord::Base.establish_connection(connection_details[DB_ENV])