programing tip

데이터베이스 구성이 어댑터를 지정하지 않습니다.

itbloger 2020. 11. 30. 07:54
반응형

데이터베이스 구성이 어댑터를 지정하지 않습니다.


mysql 데이터베이스에 연결하려고 할 때이 오류가 발생합니다. 문제는 응용 프로그램이 몇 주 동안 작동하고 무작위 로이 메시지를 받는다는 것입니다. 이 오류 메시지가 나타나면 응용 프로그램을 다시 시작할 때까지 데이터베이스에 다시 연결할 수 없습니다.

구성 파일을 사용하여 데이터베이스에 연결하고 어댑터가 지정되어 있습니다. 데이터베이스 구성은 런타임에 생성되지 않습니다.

무슨 일이 일어나고 있는지 아십니까?


명령 줄 스크립트 (여기서는 'my_script'라고합시다)를 실행하려고 할 때 동일한 오류가 발생했습니다. 그 이유는 다음과 같습니다.

  1. 거기에는 생산 환경 만 있습니다.
  2. 명령 줄에 RAILS_ENV를 설정하지 못했습니다.

따라서 다음은 제 경우의 해결책입니다.

$ RAILS_ENV = 생산 my_script


방금이 문제가 발생했으며 configration.yml의 오타로 인해 발생했습니다.

나는 원래 이것을 가지고 있었다 :

production:
  adapter:mysql

내가 이것을 갖고 싶었을 때 :

production:
  adapter: mysql

adapter :와 mysql 사이의 작은 공간이 차이를 만듭니다.


또 다른 가능한 원인 :

Rails 3.2.x establish_connection에는 환경에서 설정된 기본 인수가 있습니다.

에서 connection_specification.rb :

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

ConnectionSpecification::Resolver작동 방식 설정되지 않은 경우 ENV['DATABASE_URL']제공에 따라 다릅니다 nil. (일반적으로 'postgres://...').

당신이 잘못 한 일이 그래서, 만약 DATABASE_URL같은 것을 ENV['DATABASE_URL'] == '', 그게 당신을 줄 것이다 database configuration does not specify adapter.


실수로 Rails 서버를 시작했을 때이 오류가 발생했습니다.

sudo rails s -e "생산"-p 80

그리고 난 레일을 시작 했어야 했어

sudo 레일 s -e "생산"-p 80


이 문제를 일으킬 수있는 또 다른 것을 발견했습니다. 다른 YAML 노드 &*.

원래 로컬, 개발 별, Git 무시 구성 파일을 용이하게하기 위해 다음과 같은 작업을 수행했습니다.

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

그러나 몇 가지 디버깅 후에 establish_connection는 어떤 이유로 든 기본 키-값 쌍이 아닌 혼합 키-값 쌍으로 만 호출 된다는 것을 알게되었습니다 . adapter, host그리고 database왜 아무 생각이 없습니다. 전달되지 않는 한,이 날 위해 일하는 데 사용됩니다.

어쨌든 다른 YAML 노드에서 혼합하는 대신 전체 developmenttest해시를 로컬 구성 파일에 넣고 establish_connection다시 한 번 올바르게 호출됩니다.


저에게는이 명령이 문제를 해결했습니다.

rake db : migrate RAILS_ENV = 생산


이전 라이브러리 (ActiveRecord) 또는 gem 버전과 관련이있을 수 있다는 몇 가지 단서를 찾았습니다. 예를 들어, 앱의 나머지 부분이 괜찮아 보이지만 (업그레이드 후) 픽스쳐에 문제가 있거나이 trac 티켓 이 " Gem이 이전 Active Record gem의 어댑터를 요구하지 않도록합니다". 하지만 둘 다 오래되었지만 보석이 최신 상태인지 확인하는 것이 좋습니다 (가능한 경우).

혹시 네이티브 레일 MySQL 어댑터를 사용하고 있습니까? 이것은 이제 레일 아래에서 더 이상 사용되지 않지만 여전히 절뚝 거리고 있다고 생각할 수 있습니다.

connection_specification.rb이 오류가 발생 하는을 (를) 매우 빠르게 살펴 보았습니다. 가장 좋은 추측은 재 연결이 실패하는 것입니다 ...하지만 왜 앱을 처음 시작했을 때 괜찮 았습니까? ActiveRecord::Base.establish_connection애플리케이션 컨트롤러 (또는 다른 곳)에서 호출하는 것과 같은 거친 일을하고 있습니까?

또는 아마도 다음과 같습니다. 스크립트 러너는 연결이 끊어진 밤에 cron에서 호출됩니다. 불행히도 러너는 잘못된 RAILS_ENV. 따라서 잘못된 스탠자는에서 읽히고 database.yml해당 스탠자에는 유효하지 않은 adapter:?


다음 명령을 입력하여 동일한 오류가 발생했습니다.

db:migrate RAILS_ENV=product

그랬어 야했는데 :

db:migrate RAILS_ENV=production

Capistrano로 배포하는 동안이 오류가 발생하는 경우. 다음을 통해 올바른 RAILS_ENV를 설정하고 있는지 확인하십시오.

set :rails_env, 'production'

예를 들어 Capistrano 스테이징 배포 구성을 위해 Rails 환경을 명시 적으로 설정하지 않았습니다. 따라서 Capistrano는 RAILS_ENV로 'staging'을 사용하여 위의 오류가 발생했습니다. staging.rb 파일에서 위와 같이 프로덕션으로 설정하면 문제가 해결되었습니다.


RAILS_ENV = staging을 설정하면 database.yml 파일에서 프로덕션 사양을 찾는 것처럼 RAILS_ENV = staging이 database.yml에서 스테이징 사양을 찾습니다.

예를 들어 사용하는 모든 Rails 환경에 대해 아래와 같이 데이터베이스 구성을 제공합니다.

bundle exec cap staging deploy

production:
  adapter: mysql2
  encoding: utf8
  database: rails
  username: rails
  password: pass
  host: 127.0.0.1
  port: 3306
  pool: 5
  timeout: 5000

staging:
  adapter: mysql2
  encoding: utf8
  database: rails
  username: rails
  password: pass
  host: 127.0.0.1
  port: 3306
  pool: 5
  timeout: 5000

mysql에 C 기반 루비 gem을 사용하는 것을 잊지 마십시오. 루비 기반은 생산에 불안정합니다.

gem을 설치해보세요

gem install mysql

libmySQL.dll 을 ruby ​​bin 디렉토리 에 복사하는 것을 잊지 마십시오 .


I had this error with another problem; I had specified 'development' twice, and 'test' not at all.


There are alot of bad tutorials out there on the internet that show yaml files like so:

development:
encoding: utf
database: dbname
...etc

YAML files are case sensitive and require TWO SPACES for the inner contents of each given db-type attribute. Like so:

development:
  encoding: utf
  database: dbname
  ...etc

UPDATE: I got this error again today. My VPS server had installed Rails 3.2.8 when my app was running Rails 3.2.6.

Definitely check your Gemfile and your database.yml file (of course). The problem here is clearly stated---Rails is not communicating with your database specifically due to an adapter (aka gem)


We had this issue with one of our older apps. Someone had created a boutique named environment, that even if RAIL_ENV was set to production, it was looking for a database configuration called legacy_<RAIL_ENV>, so I had to make a database environment called legacy_production for this app to work.

If you are maintain someone else's app, I would look for a copy of this app's database.yml that is working, perhaps it has some oddly named configuration. You can search your codebase for establish_connection to see if it is defining some strange variant.


I met this problem due to the 'multiple database support issue'. In my app/model folder, there is a file defined a redundant database connection:

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

but this database is not found in my database.yml ( because it's not used at all ).

so the solution is quit simple: remove this file and everything is fine !


You may have an error like:

RAILS_ENV= test

A space after the equals sign is not allowed, change it to:

RAILS_ENV=test

This happens to me, finally I found that RAILS_ENV is case sensitive, in my enviroment I set RAILS_ENV=DEVELOPMENT , which is wrong, the value of RAILS_ENV must be lowercase.

$ 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

rails -e "production" is okay

only rails -e production returns error

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

call rake assets:precompile:all


This is probably not the most likely issue to cause this error, but here it is just in case.

My problem was that I was building the database settings in a Hash using symbols as keys and then serializing it with #to_yaml to database.yaml. ActiveRecord expects the environment names to be Strings, not Symbols, so it wasn't picking up the database settings when reading the generated file. I fixed it by using string keys in the hash.


For Rails4, commenting the line fetch(:default_env).merge!(rails_env: 'production') in production.rb and adding set :rails_env, :production fixed it.


You need to specify the environment when running the server or command as your database.yml file may have only production adapter while simply runnig rake db:migrate for example will take environment variable as development.


Just for the sake of completeness, I just got this error because I natively created a parametrised Rails runner script that takes an email address, and named the command line option -e -- which of course is the one the Rails runner uses for the environment. So it was trying to find an environment configuration that matched the email address!

Luckily, just before the ActiveRecord error mentioned in the title, it gave me an error message that helped me twig what the problem actually was:

You did not specify how you would like Rails to report deprecation notices for your test@example.com environment, please set config.active_support.deprecation to :log, :notify or :stderr at config/environments/test@example.com.rb

참고URL : https://stackoverflow.com/questions/413659/database-configuration-does-not-specify-adapter

반응형