source

당신은 레일즈에서 DB 사용자 이름, pw, 데이터베이스 이름을 얻을 수 있습니까?

bestscript 2023. 7. 19. 22:36

당신은 레일즈에서 DB 사용자 이름, pw, 데이터베이스 이름을 얻을 수 있습니까?

Rails/ActiveRecord 이외의 DB 작업을 수행하는 Rake 작업을 작성하고 있습니다.

에서 정의한 대로 현재 환경에 대한 DB 연결 정보(호스트, 사용자 이름, 암호, DB 이름)를 가져올 수 있는 방법이 있습니까?database.yml?

이렇게 연결하는 데 사용할 수 있게 받고 싶습니다.

con = Mysql.real_connect("host", "user", "pw", "current_db")

레일 내에서 구성 개체를 생성하고 필요한 정보를 얻을 수 있습니다.

config   = Rails.configuration.database_configuration
host     = config[Rails.env]["host"]
database = config[Rails.env]["database"]
username = config[Rails.env]["username"]
password = config[Rails.env]["password"]

레일:: 설명서를 참조하십시오.세부 정보에 대한 구성입니다.

YAML::load를 사용하여 데이터베이스 구성 파일에서 구성을 로드합니다.database.yml직접 사용하여 레일 환경 외부에서 정보를 얻을 수 있습니다.

require 'YAML'
info = YAML::load(IO.read("database.yml"))
print info["production"]["host"]
print info["production"]["database"]
...

위의 논평에서 브라이언의 답변은 조금 더 노출될 가치가 있습니다.

>> Rails.configuration.database_configuration[Rails.env]
=> {"encoding"=>"unicode", "username"=>"postgres", "adapter"=>"postgresql", "port"=>5432, "host"=>"localhost", "password"=>"postgres", "database"=>"mydb", "pool"=>5}
ActiveRecord::Base.connection_config

연결 구성을 해시로 반환합니다.

=> {:adapter=>ADAPTER_NAME, :host=>HOST, :port=>PORT, 
    :database=>DB, :pool=>POOL, :username=>USERNAME, 
    :password=>PASSWORD} 

~하듯이tpett그들의 논평에서 언급되었다: 이 솔루션은 구성을 병합하는 것을 설명합니다.database.yml그리고 환경 변수로부터.DATABASE_URL.

레일 6.1 기준,ActiveRecord::Base.connection_config사용되지 않습니다.새로운 접근자는ActiveRecord::Base.connection_db_config

[1] pry(main)> ActiveRecord::Base.connection_db_config
=> #<ActiveRecord::DatabaseConfigurations::HashConfig:0x00007fe04ae72e58
 @configuration_hash=
  {:adapter=>"postgresql",
   :encoding=>"utf8",
   :min_messages=>"WARNING",
   :host=>"localhost",
   :username=>"postgres",
   :password=>"P@ssw0rd",
   :port=>5432,
   :database=>"myapp_development"},
 @env_name="development",
 @name="primary">

저는 이것이 가장 간단한 해결책이라고 생각합니다.적어도 레일 5.2에서 일부 테스트를 수행한 후에는 DATABASE_URL이 올바르게 해결됩니다.

 ActiveRecord::Base.configurations[Rails.env]

Rails 6.1+에서는 다음을 사용할 수 있습니다.

ActiveRecord::Base.connection_db_config.configuration_hash

현재 환경의 연결 정보가 포함된 해시를 반환합니다.

{
  :adapter=>"postgresql",
  :encoding=>"utf8",
  :min_messages=>"WARNING",
  :host=>"localhost",
  :username=>"postgres",
  :password=>"P@ssw0rd",
  :port=>5432,
  :database=>"my_app_development"
}

오래된 질문이지만 이것은 제가 이것을 하는 방법을 찾는 첫 번째 단계 중 하나였기 때문에 저는 이것이 다른 사람에게 도움이 될 수 있다고 생각합니다.보통 홈 디렉토리에 .my.cnf 파일이 있습니다.그래서 'parseconfig' 보석과 내 데이터베이스에 있는 몇 가지 ERB 구문을 사용합니다.yml config file은 동적 파일이 있다는 것을 의미하며, 소스 제어를 체크인하고 배포를 간소화할 수 있습니다(제 경우).일반 소켓 목록도 참고하십시오. 이렇게 하면 UNIX 소켓 경로가 다를 수 있는 다른 운영 체제로 앱을 더 쉽게 이동할 수 있습니다.

<% 
    require 'parseconfig'
    c=ParseConfig.new('../../.my.cnf') %>

mysqlevn: &mysql
  adapter: mysql 
  username: <%= c.params['client']['user'] %>
  password: <%= c.params['client']['password'] %>
  host: localhost 
  socket: <%= [ 
  '/var/run/mysqld/mysqld.sock',
  '/var/lib/mysql/mysql.sock',
  '/tmp/mysqld.sock',
  '/tmp/mysql.sock'].detect { |socket| File.exist?(socket) } %>

production:
  database: app_production
  <<: *mysql


development:
  database: app_development 
  <<: *mysql

# Do not set this db to the same as development or production.
test:
  database: app_test
  <<: *mysql

참조: http://effectif.com/articles/database-yml-should-be-checked-in

는 pgAdmin에 연결하기 위해 사용자 이름과 비밀번호를 얻으려고 했습니다.위의 모든 방법을 시도했지만 값을 찾을 수 없었습니다.username그리고.password7번 레일에서 개발 중인 데이터베이스를 위해.

pgAdmin은 실제로 개별 앱의 데이터베이스에 대한 사용자 이름과 암호가 필요하지 않은 것으로 밝혀졌습니다. 대신 pgAdmin은 postgres 서버에 인증되어 서버의 모든 데이터베이스에 액세스할 수 있습니다.

이것은 사람들이 필요로 하는 문제를 해결할 수 있습니다.username그리고.password나와 비슷한 이유로.


하지만 이것이 제가 왜 그 일을 할 수 없었는지 설명해주지는 못합니다.username그리고.password특정 앱(앱 7)용입니다.Rails 7은 기본 자격 증명을 사용하여 로컬 데이터베이스에 연결하기 때문입니다.

나의 경우(포스트그리)SQL)에서는 기본적으로 암호 없이 "postgres"라는 사용자 이름을 사용합니다.

그래서 만약 당신이 체크인을 한다면,config/database.yml그리고 개발 환경은 다음과 같이 언급하고 있습니다.default그리고 이러한 기본값들은 어떤 것도 나열하지 않습니다.username그리고.password데이터베이스의 기본 자격 증명을 사용하고 있을 수 있습니다.저는 이것을 확인할 방법을 찾을 수 없었습니다. 단지 제가 7번 레일에서 본 것에 근거한 저의 의심일 뿐입니다.database.yml 실사ENV에서는 DB와 관련된 내용을 제공하지 않으며, 위의 모든 방법은 결과를 제공하지 않습니다.

언급URL : https://stackoverflow.com/questions/399396/can-you-get-db-username-pw-database-name-in-rails