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:
- Er is daar alleen een productieomgeving.
- 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_connection
een 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::Resolver
werkt, hangt af van het feit dat ENV['DATABASE_URL']
een nil
geeft als deze niet is ingesteld. (Normaal gesproken zou het zoiets zijn als 'postgres://...'
).
Dus, als je DATABASE_URL
verkeerd 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_connection
om de een of andere reden werd aangeroepen met alleen de gemengde sleutel-waardeparen en niet de belangrijkste. D.w.z. adaptor
, host
en database
werden 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 development
en test
-hashes in het lokale configuratiebestand en establish_connection
wordt 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_production
om deze app te laten werken.
Als je de app van iemand anders onderhoudt, zou ik op zoek gaan naar een kopie van de database.yml
van deze app die werkt, misschien heeft het een vreemde configuratie. Je kunt in je codebase zoeken naar establish_connection
om 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_ENV
hoofdlettergevoelig is, in mijn omgeving heb ik
RAILS_ENV=DEVELOPMENT
, wat niet klopt, de waarde van RAILS_ENV
moet 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 production
geeft 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 Hash
met symbolen als sleutels en deze vervolgens serialiseerde met #to_yaml
naar database.yaml
. ActiveRecord verwacht dat de omgevingsnamen Strings
zijn, 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.rb
en set :rails_env, :production
heeft 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 -e
heb 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 adaptor
Ik had adaptor
en 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.