Lorsque j'utilise heroku open, mon application Web fonctionne correctement, mais lorsque je me sers de Rails s (localhost), je rencontre cette erreur:
ActiveRecord::AdapterNotSpecified database configuration does not specify adapter
Pourquoi est-ce?
C'est mon 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
Et voici mon 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]
Pour que votre application fonctionne localement, vous devez:
my_app_development
)Changez votre database.yml
en:
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
exécuter rake db:migrate
Vous n'avez pas affiché la commande à l'origine de cette requête, mais cela peut arriver si vous passez une chaîne et non un symbole
Par exemple:
irb(main):001:0> ActiveRecord::Base.establish_connection("#{Rails.env}")
ActiveRecord::AdapterNotSpecified: database configuration does not specify adapter
Mais si vous utilisez un symbole, cela fonctionnera.
irb(main):001:0> ActiveRecord::Base.establish_connection("#{Rails.env}".to_sym)
=> #<ActiveRecord::ConnectionAdapters::ConnectionPool:0x007f2f484a32a0 #....
Votre database.yml devrait ressembler à ceci:
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"
Modifiez nom_données_développement avec le nom de votre base de données locale . Modifiez également nom_utilisateur et mot_passe avec votre nom d'utilisateur et votre mot de passe corrects.
Supprimer les onglets rien de plus, ident parfait, tels que:
# 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'] %>
Si vous essayez d'utiliser activerecord sans Rails, vous pouvez rencontrer ce problème avec un fichier database.yml avec plusieurs configurations d'environnement. Vous aurez donc besoin de passer la clé d’environnement dans la configuration comme ceci:
DB_ENV ||= 'development'
connection_details = YAML::load(File.open('config/database.yml'))
ActiveRecord::Base.establish_connection(connection_details[DB_ENV])
Pourquoi utilisez-vous une référence de nœud yml dans votre database.yml
?
Vous devriez avoir quelque chose comme ça:
#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
Mettre à jour
Rails utilise une base de données. Vous avez vous connecter à une base de données pour le faire fonctionner. Pour ce faire, vous devez définir les différents détails de connexion dans database.yml
Pour définir la bonne information, vous devez comprendre que Rails fonctionne selon plusieurs environments
- development
& production
étant les deux plus utilisés.
Pour que Rails fonctionne dans votre environnement (de développement) local, vous devez définir les détails de la base de données appropriés. Cela signifie que vous avez besoin d’une base de données pour vous connecter - ce qui est généralement fait pour la configuration d’un serveur mysql/pgsql local
En bout de ligne, vous vous connectez à une base de données en utilisant:
- nom d'hôte
- username
- mot de passe
- nom db
Vous devez les définir dans votre fichier config/database.yml
Si vous avez un serveur en cours d'exécution dans votre environnement local, votre fichier database.yml ressemblera à ceci:
#config/database.yml
development:
adapter: mysql2
encoding: utf8
database: db_name
pool: 5
username: username
password: password