databaseconfiguratie specificeert geen adapter

Ik krijg deze foutmelding wanneer ik verbinding probeer te maken met een mysql-database. Het probleem is dat de applicatie wekenlang werkt, en dan krijg ik willekeurig deze melding. Als ik deze foutmelding krijg, kan de applicatie pas opnieuw verbinding maken met de database als ik hem opnieuw start.

Ik gebruik een configuratiebestand om verbinding te maken met de database, en de adapter is opgegeven…de databaseconfiguratie wordt niet gegenereerd tijdens runtime.

Heb je enig idee wat er aan de hand is?


Antwoord 1, autoriteit 100%

toen ik probeerde een opdrachtregelscript uit te voeren (laten we hier ‘mijn_script’ zeggen), deed zich dezelfde fout voor. De redenen waren:

  1. Er is daar alleen een productieomgeving.
  2. Ik heb gemist om RAILS_ENV in te stellen voor de opdrachtregel.

Dus, in mijn geval is het volgende de oplossing:

$ RAILS_ENV=productie my_script


Antwoord 2, autoriteit 51%

Ik had net dit probleem en het werd veroorzaakt door een typfout in mijn configration.yml.

Oorspronkelijk had ik dit:

production:
  adapter:mysql

Toen ik dit wilde hebben:

production:
  adapter: mysql

Die ene kleine ruimte tussen adapter: en mysql maakt het verschil.


Antwoord 3, autoriteit 18%

Een andere mogelijke oorzaak:

In Rails 3.2.x heeft establish_connectioneen standaardargument ingesteld vanuit de omgeving:

Van connection_specification.rb:

def self.establish_connection(spec = ENV["DATABASE_URL"])
  resolver = ConnectionSpecification::Resolver.new spec, configurations
  spec = resolver.spec

De manier waarop ConnectionSpecification::Resolverwerkt, hangt af van het feit dat ENV['DATABASE_URL']een nilgeeft als deze niet is ingesteld. (Normaal gesproken zou het zoiets zijn als 'postgres://...').

Dus, als je DATABASE_URLverkeerd hebt geconfigureerd zodat ENV['DATABASE_URL'] == '', dan krijg je database configuration does not specify adapter.


Antwoord 4, autoriteit 10%

Ik kreeg deze fout toen ik per ongeluk de rails-server startte met

sudo rails s -e “Productie” -p 80

en ik had met rails moeten beginnen

sudo rails s -e “productie” -p 80


Antwoord 5, autoriteit 6%

Ik heb nog iets gevonden dat dit probleem kan veroorzaken: een ander YAML-knooppunt “inmengen” met behulp van &en *.

Ik deed oorspronkelijk zoiets als het volgende om lokale, per-ontwikkelde, Git-genegeerde configuratiebestanden te vergemakkelijken:

http://blog. lathi.net/articles/2006/03/02/config-database-yml-goodness-for-teams

Maar na wat debuggen kwam ik erachter dat establish_connectionom de een of andere reden werd aangeroepen met alleen de gemengde sleutel-waardeparen en niet de belangrijkste. D.w.z. adaptor, hosten databasewerden niet doorgegeven. Ik heb geen idee waarom, en dit werkte voor mij.

Hoe dan ook, in plaats van een ander YAML-knooppunt te mengen, plaats ik nu de hele developmenten test-hashes in het lokale configuratiebestand en establish_connectionwordt weer correct gebeld.


Antwoord 6, autoriteit 6%

Voor mij heeft deze opdracht het probleem opgelost.

rake db:migrate RAILS_ENV=productie


7

Ik had deze fout met een ander probleem; Ik had twee keer ‘ontwikkeling’ gespecificeerd en ‘test’ helemaal niet.


Antwoord 8

We hadden dit probleem met een van onze oudere apps. Iemand had een omgeving met de naam van een boutique gemaakt, die zelfs als RAIL_ENV op productie was ingesteld, op zoek was naar een databaseconfiguratie met de naam legacy_<RAIL_ENV>, dus moest ik een databaseomgeving maken met de naam legacy_productionom deze app te laten werken.

Als je de app van iemand anders onderhoudt, zou ik op zoek gaan naar een kopie van de database.ymlvan deze app die werkt, misschien heeft het een vreemde configuratie. Je kunt in je codebase zoeken naar establish_connectionom te zien of het een vreemde variant definieert.


Antwoord 9

Ik heb dit probleem ondervonden vanwege het ‘probleem met meerdere databases’. In mijn app/model-map is er een bestand gedefinieerd als een redundante databaseverbinding:

class CacheCleanerActiveRecord < ActiveRecord::Base
  establish_connection "cache_cleaner_#{Rails.env}"
  self.abstract_class = true
end

maar deze database wordt niet gevonden in mijn database.yml (omdat deze helemaal niet wordt gebruikt).

dus de oplossing is vrij simpel: verwijder dit bestand en alles is in orde!


Antwoord 10

Misschien heb je een fout zoals:

RAILS_ENV= test

Een spatie na het gelijkteken is niet toegestaan, verander deze in:

RAILS_ENV=test

Antwoord 11

Dit overkomt mij, uiteindelijk ontdekte ik dat RAILS_ENVhoofdlettergevoelig is, in mijn omgeving heb ik
RAILS_ENV=DEVELOPMENT, wat niet klopt, de waarde van RAILS_ENVmoet kleine letterszijn.

$ RAILS_ENV=DEVELOPMENT rails server webrick
=> Booting WEBrick
=> Rails 4.2.5 application starting in DEVELOPMENT on http://localhost:3000
=> Run `rails server -h` for more startup options
=> Ctrl-C to shutdown server
config.eager_load is set to nil. Please update your config/environments/*.rb files accordingly:
  * development - set it to false
  * test - set it to false (unless you use a tool that preloads your test environment)
  * production - set it to true
Exiting
/home/fangxing/.rvm/gems/ruby-2.3.0/gems/activerecord-4.2.5/lib/active_record/connection_adapters/connection_specification.rb:248:in `resolve_symbol_c
onnection': 'DEVELOPMENT' database is not configured. Available: ["default", "development", "test", "production"] (ActiveRecord::AdapterNotSpecified)
        from /home/fangxing/.rvm/gems/ruby-2.3.0/gems/activerecord-4.2.5/lib/active_record/connection_adapters/connection_specification.rb:211:in `res
olve_connection'
$ RAILS_ENV=development rails server webrick
RubyDep: WARNING: Your Ruby is outdated/buggy. (To disable warnings, set RUBY_DEP_GEM_SILENCE_WARNINGS=1)
RubyDep: WARNING: Your Ruby is: 2.3.0 (buggy). Recommendation: install 2.3.1.
=> Booting WEBrick
=> Rails 4.2.5 application starting in development on http://localhost:3000
=> Run `rails server -h` for more startup options
=> Ctrl-C to shutdown server
[2016-07-20 16:41:09] INFO  WEBrick 1.3.1
[2016-07-20 16:41:09] INFO  ruby 2.3.0 (2015-12-25) [x86_64-linux]
[2016-07-20 16:41:09] INFO  WEBrick::HTTPServer#start: pid=19881 port=3000

Antwoord 12

rails -e "production"is oke

alleen rails -e productiongeeft fout

database configuration does not specify adapter (ActiveRecord::AdapterNotSpecified)

Antwoord 13

bel rake assets:precompile:all


Antwoord 14

Dit is waarschijnlijk niet het meest waarschijnlijke probleem dat deze fout veroorzaakt, maar hier is het voor het geval dat.

Mijn probleem was dat ik de database-instellingen bouwde in een Hashmet symbolen als sleutels en deze vervolgens serialiseerde met #to_yamlnaar database.yaml. ActiveRecord verwacht dat de omgevingsnamen Stringszijn, niet Symbols, dus het nam de database-instellingen niet op bij het lezen van het gegenereerde bestand. Ik heb het opgelost door tekenreekstoetsen in de hash te gebruiken.


Antwoord 15

Voor Rails4, commentaar geven op de regel fetch(:default_env).merge!(rails_env: 'production')in production.rben set :rails_env, :productionheeft het opgelost.


Antwoord 16

U moet de omgeving specificeren wanneer u de server of opdracht uitvoert, aangezien uw database.yml-bestand mogelijk alleen een productie-adapter heeft, terwijl het uitvoeren van bijvoorbeeld rake db:migrate de omgevingsvariabele als ontwikkeling zal nemen.


Antwoord 17

Voor de volledigheid kreeg ik deze foutmelding omdat ik een geparametriseerd Rails runner-script heb gemaakt dat een e-mailadres nodig heeft, en de opdrachtregeloptie -eheb genoemd — wat natuurlijk is degene die de Rails loper gebruikt voor het milieu. Het probeerde dus een omgevingsconfiguratie te vinden die overeenkwam met het e-mailadres!

Gelukkig gaf het me net voor de ActiveRecord-fout die in de titel wordt genoemd, een foutmelding die me hielp om erachter te komen wat het probleem eigenlijk was:

You did not specify how you would like Rails to report deprecation notices for your [email protected] environment, please set config.active_support.deprecation to :log, :notify or :stderr at config/environments/[email protected]

Antwoord 18

Controleer de spelling van adaptorIk had adaptoren kreeg deze foutmelding.


Antwoord 19

Ik kreeg deze foutmelding bij het upgraden van Rails 4 naar 5. Ik was aan het bellen

establish_connection "myconnection"

waarbij "myconnection"een geldige sleutel is in mijn database.yml. Het doorgeven van deze parameter als een tekenreeks wordt echter blijkbaar niet langer ondersteund. Het gebruik van een symbool loste het probleem op.

Other episodes