configuration de base de données ne permet pas de spécifier l'adaptateur
Je reçois ce message d'erreur quand j'essaie de me connecter à une base de données mysql. Le problème est que l'application fonctionne pendant des semaines, et au hasard, puis je reçois ce message. Quand je reçois ce message d'erreur l'application n'est pas en mesure de se reconnecter à la base de données jusqu'à ce que je le redémarrer.
Je suis en utilisant un fichier de configuration pour se connecter à la base de données, et la carte est spécifié...la base de données de configuration n'est pas généré lors de l'exécution.
Avez-vous une idée sur ce qui se passe?
- Quelle plate-forme? Pouvez-vous poster plein de trace de pile/entrées de journal? Lorsque vous "redémarrer", entendez-vous l'application ou de la db?
- Merci à tous pour les suggestions mentionnées ici. Je suis actuellement à avoir ce problème sur Heroku avec des Rails 3.2.6. Lorsque
RACK_ENV=development
ouRAILS_ENV=production
tout est bien, mais quandRACK_ENV=production
etRAILS_ENV
est pas défini, comme je préfère que ce soit, alors j'obtiens ce message. La discussion ici m'a aidé à trouver cette combinaison unique de circonstances. Fera rapport lors de je sais plus. - En fait, stackoverflow.com/questions/9661115/... des pistes plus précisément mon problème. Vais poster mes résultats plus tard.
- J'avais inséré des commentaires ("#") dans une base de données.fichier yml. Cela, apparemment, c'est une mauvaise idée.
- Vérifiez votre base de données.fichier yml. Assurez-vous que la "carte" est par défaut ou spécifié dans l'environnement par défaut: &pool par défaut: 5 délai d'attente: 5000 développement: <<: *adaptateur par défaut: base de données sqlite3: db/développement.sqlite3
Vous devez vous connecter pour publier un commentaire.
quand j'ai essayé d'exécuter un script de ligne de commande (disons 'my_script' ici), le même message d'erreur qui s'est passé. Les raisons en sont:
Alors, voici la solution dans mon cas:
rake
de commande ou quelque chose de similaire, vous pouvez passer directement comme paramètre, par exemple:rake redmine:plugins:migrate RAILS_ENV=production
RAILS_ENV=production bundle exec ...
- dans mon casRAILS_ENV=production bundle exec rake assets:precompile
RAILS_ENV=production rails c
mais n'a pas fonctionné quand j'ai coururails c RAILS_ENV=production
. Réglage de l'env première est le truc.Je viens d'avoir ce problème, et il a été causé par une faute de frappe dans mon configration.yml.
J'ai d'abord eu ce:
Quand j'ai voulu avoir ceci:
Qu'un peu d'espace entre la carte: et mysql qui fait la différence.
Une autre cause possible:
Dans Les Rails 3.2.x,
establish_connection
a un argument par défaut définie à partir de l'environnement:De connection_specification.rb:
La façon
ConnectionSpecification::Resolver
travaux dépend deENV['DATABASE_URL']
donner unnil
si cela n'est pas. (Normalement, il serait quelque chose comme'postgres://...'
).Donc, si vous arrive d'avoir un problème de configuration
DATABASE_URL
tels queENV['DATABASE_URL'] == ''
, qui vous donneradatabase configuration does not specify adapter
.docker-compose
j'ai donc fait celaDATABASE_URL: database_service/app_development
oùdatabases_service
est l'autre nom du conteneur etapp_development
est la base de données. Je m'attends à ce quedocker
lien les conteneurs ensemble, mais pour une raison que j'obtiens cette erreur uniquement dans cette configuration PS: je l'ai fait avant et ça fonctionne, donc c'est pourquoi je suis confusDATABASE_URL
J'ai eu cette erreur quand j'ai commencé à tort serveur rails avec
et j'aurais du commencer rails avec
J'ai trouvé une autre chose qui peut provoquer ce problème: "le mélange dans un" autre YAML nœud à l'aide de
&
et*
.J'ai été à l'origine de faire quelque chose comme ce qui suit afin de faciliter local, par-développer, Git-ignoré des fichiers de configuration:
http://blog.lathi.net/articles/2006/03/02/config-database-yml-goodness-for-teams
Mais, après un peu de débogage, je suis venu pour savoir que
establish_connection
était pour quelque raison d'être appelé avec seulement le mélange de paires clé-valeur et de ne pas les principaux. I. e.adapter
,host
, etdatabase
n'ont pas été transmis. Je n'ai aucune idée de pourquoi, et cette habitude de travailler pour moi.De toute façon, au lieu de mélanger dans un autre YAML nœud, je vais maintenant mettre l'ensemble de la
development
ettest
hachages dans les locaux de fichier de config, etestablish_connection
est encore une fois appelé correctement.Pour moi, cette commande a résolu le problème.
rake db:migrate RAILS_ENV=production
J'ai trouvé un couple d'indices qui ce pourrait être liée à d'anciens de la bibliothèque (ActiveRecord) ou gem versions. Par exemple, des problèmes avec les luminaires même si le reste de l'app semble ok (après une mise à niveau) ou ce trac billet, qui "arrête gemmes d'exiger une carte à partir d'un vieux "Active Record "gemme". Ces deux sont vieux, cependant, mais il pourrait être intéressant de s'assurer que votre gemmes sont à jour (si possible).
Êtes-vous à l'aide de la maternelle rails MySQL adaptateur, par hasard? C'est maintenant obsolète, sous les rails, mais il est concevable, c'est toujours accuse le coup.
J'ai pris un coup d'oeil très rapide à
connection_specification.rb
, trop, qui est l'endroit où cette erreur est à venir, et ma meilleure supposition est que l'une reconnexion échoue... mais pourquoi, car il s'agissait bien évidemment d'accord quand vous avez commencé l'application)? Faites-vous quelque chose de sauvage comme appelerActiveRecord::Base.establish_connection
dans votre contrôleur d'application (ou ailleurs)?Ou peut-être quelque chose comme: script runner est appelé par cron dans le milieu de la nuit lorsque la connexion est coupée. Malheureusement, le coureur est invoquée avec un mauvais
RAILS_ENV
. Ainsi, le mauvais strophe est lu à partir dedatabase.yml
, et que la strophe contient une défaillance deadapter:
?J'ai eu le même message d'erreur en tapant la commande suivante:
Devraient ai été:
Si vous obtenez ce message d'erreur lors du déploiement avec Capistrano. Assurez-vous que vous êtes le réglage de l'RAILS_ENV via
Par exemple je n'étais pas la définition explicite de l'environnement Rails pour le Capistrano mise en scène de configuration de déploiement. Et donc Capistrano utilisé la "mise en scène" comme le RAILS_ENV, résultant dans l'erreur ci-dessus. Réglage à la production, comme ci-dessus dans la mise en scène.rb fichier a résolu le problème.
Ne pas oublier que RAILS_ENV=mise en scène va chercher une mise en scène de la spécification dans votre base de données.yml comme paramètre RAILS_ENV=production de regarder pour une production de la spécification de base de données.fichier yml.
Fournir des configs de base de données, comme indiqué ci-dessous, pour tous les rails de l'environnement vous de la cible en utilisant, par exemple
N'oubliez pas d'utiliser le C-Base de ruby gem mysql. Le rubis base est instable pour la production.
Essayez d'installer la gem
N'oubliez pas de copier libmySQL.dll en ruby le répertoire bin.
J'ai eu cette erreur avec un autre problème; j'avais spécifié que le "développement" deux fois, et "test" pas du tout.
Il y a beaucoup de mauvais tutoriels sur internet qui montrent des fichiers yaml comme suit:
Les fichiers YAML sont sensibles à la casse et ont besoin de DEUX ESPACES à l'intérieur le contenu de chaque db-type de l'attribut. Comme:
Mise à JOUR: j'ai eu cette erreur nouveau aujourd'hui. Mon serveur VPS avait installé des Rails 3.2.8 quand mon application Rails 3.2.6.
Certainement vérifier votre Gemfile et votre base de données.fichier yml (bien sûr). Le problème ici est clairement indiqué---Rails est de ne pas communiquer avec votre base de données, notamment grâce à un adaptateur (aka gem)
Nous avons eu ce problème avec une de nos applications plus anciennes. Quelqu'un avait créé une boutique nommée environnement, que même si RAIL_ENV a été mis en production, il a été à la recherche pour une configuration de base de données appelé
legacy_<RAIL_ENV>
, j'ai donc dû faire un environnement de base de données appelélegacy_production
pour cette application au travail.Si vous êtes de maintenir quelqu'un d'autre application, je chercherais une copie de cette application de
database.yml
qui est au travail, il a peut-être certains curieusement nommée configuration. Vous pouvez rechercher dans votre base de code pourestablish_connection
pour voir si c'est la définition d'une étrange variante.J'ai rencontré ce problème à cause de la "base de données multiples problème de prise en charge'. Dans mon
app/model
dossier, il y a un fichier défini une base de données redondante connexion:mais cette base de données n'est pas trouvé dans ma base de données.yml ( parce que c'est pas du tout utilisé ).
donc la solution est très simple: supprimer ce fichier et tout va bien !
Vous pouvez avoir une erreur de ce type:
Un espace après le signe égal n'est pas autorisé, à le modifier:
Ce qui m'arrive, j'ai enfin trouvé que
RAILS_ENV
est sensible à la casse, dans mon environnement j'ai misRAILS_ENV=DEVELOPMENT
, ce qui est faux, la valeur deRAILS_ENV
doit être minuscules.rails -e "production"
est d'accordseulement
rails -e production
renvoie l'erreurappel
rake assets:precompile:all
Ce n'est probablement pas le plus probable à l'origine de cette erreur, mais ici c'est juste au cas où.
Mon problème est que j'ai été la construction de la base de données de paramètres dans un
Hash
à l'aide de symboles comme les touches et puis la sérialisation avec#to_yaml
àdatabase.yaml
. ActiveRecord attend de l'environnement des nomsStrings
, pasSymbols
, de sorte qu'il n'était pas ramasser les paramètres de base de données lors de la lecture du fichier généré. Je l'ai corrigé en utilisant des clés de chaîne dans la table de hachage.Pour Rails4, en commentant la ligne
fetch(:default_env).merge!(rails_env: 'production')
dansproduction.rb
et l'ajout deset :rails_env, :production
il fixe.Vous devez spécifier l'environnement lors de l'exécution du serveur de commande ou en tant que votre base de données.fichier yml peuvent avoir seulement la production de carte tout simplement de running rake db:migrate par exemple prendre la variable d'environnement de développement.
Juste par souci d'exhaustivité, je viens de recevoir ce message d'erreur parce que je nativement créé un paramétrés Rails de coulissage script qui prend une adresse e-mail, et le nom de l'option de ligne de commande
-e
-- qui est évidemment l'un des Rails de coulissage utilise pour l'environnement. Il était donc essayer de trouver un environnement de configuration correspondant à l'adresse e-mail!Heureusement, juste avant la
ActiveRecord
d'erreur mentionné dans le titre, il m'a donné un message d'erreur qui m'a aidé à brindille que le problème était en réalité: