当我使用heroku打开我的网络应用程序工作正常但是当我使用rails s(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
这是我的宝石文件:
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]
答案 0 :(得分:14)
要让您的应用在本地工作,您需要:
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
答案 1 :(得分:10)
您没有显示导致此查询的命令,但如果您传递字符串而不是符号,则可能会发生这种情况。
例如:
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)
=> #<ActiveRecord::ConnectionAdapters::ConnectionPool:0x007f2f484a32a0 #....
答案 2 :(得分:6)
您的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用户名和密码。
答案 3 :(得分:3)
不再删除标签,完美标识,例如:
# 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'] %>
答案 4 :(得分:0)
为什么在database.yml
中使用yml node reference?
你应该有这样的东西:
#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
&amp; production
是最常用的两个
要使Rails在本地(开发)环境中运行,您需要定义正确的数据库详细信息。这意味着您需要一个数据库才能连接 - 通常是setting up a local mysql / pgsql server
底线是您使用以下方式连接到数据库:
- 主机名
- 用户名
- 密码
- db name
您需要在config/database.yml
文件
如果您的服务器在本地环境中运行,则您的database.yml文件将如下所示:
#config/database.yml
development:
adapter: mysql2
encoding: utf8
database: db_name
pool: 5
username: username
password: password
答案 5 :(得分:0)
如果您尝试使用无轨的activerecord,则可能会在具有多个环境设置的database.yml中遇到此问题。因此,您需要像这样将环境密钥传递到配置设置中:
DB_ENV ||= 'development'
connection_details = YAML::load(File.open('config/database.yml'))
ActiveRecord::Base.establish_connection(connection_details[DB_ENV])
答案 6 :(得分:0)
在我的情况下,原因在我的Rakefile中。
当我运行rake db:migrate
时,我得到了:
rake db:migrate
rake aborted!
ActiveRecord::AdapterNotSpecified: The `default_env` database is not configured for the `default_env` environment.
Available databases configurations are:
development
test
production
我已经在我的 Rakefile 中找到了该行:
ActiveRecord::Base.establish_connection(ENV['DATABASE_URL'])
并更改为默认值:
ActiveRecord::Base.establish_connection(ENV['DATABASE_URL'] || 'postgres://localhost/db_name')
,现在工作正常。您可以找到here
的详细信息