환경 변수를 설정하는 방법은 윤곽이 그려진 것 같습니다. here. 즉db : migrate : 재설정이 환경 변수와 함께 작동하지 않습니다.
는 내가 설정/app_env_vars.rb 파일을 만든 넣어 :
unless Rails.env.production?
ENV['DB_PASSWORD'] = 'password'
ENV['DB_USERNAME'] = 'username'
end
puts 'ECHO app_env_vars.rb'
를 설정에서/environment.rb에를 내가 넣어 :
app_env_vars = File.join(Rails.root, 'config', 'app_env_vars.rb')
load(app_env_vars) if File.exists?(app_env_vars)
puts "ECHO environment.rb"
바로
에서 Rails.application.initialize!
전에 database.yml :
development:
adapter: postgresql
encoding: unicode
database: my_app_development
host: localhost
pool: 5
password: <%= ENV['DB_PASSWORD'] %>
test:
adapter: postgresql
encoding: unicode
database: my_app_test
host: localhost
pool: 5
password: <%= ENV['DB_PASSWORD'] %>
나는 그런 bundle exec rake db:migrate
와 bundle exec rake db:reset
잘 작동하지만 bundle exec rake db:migrate:reset
을 실행할 때 표시 실패 등의 작업 실행 : 나는 번들 간부 갈퀴 DB를 실행하면 일반적으로
fe_sendauth: no password supplied
.
.
.
Couldn't drop my_app_development
fe_sendauth: no password supplied
.
.
.
Couldn't drop my_app_test
fe_sendauth: no password supplied
ECHO app_env_vars.rb
ECHO environment.rb
: 마이그레이션 (및 DB : 드롭)를 먼저 것이다 ECHO 파트를 표시 한 다음 작업을 수행하고 로그를 저장하십시오. 그러나 db : migrate : reset의 경우 태스크가 끝날 때까지 환경 변수를 초기화하지 않습니다.
database.yml에서 env 변수가 아닌 실제 암호를 넣으면 db : migrate : reset이 문제없이 작동합니다. 여기
는 레이크 dB이다db:reset
** Execute environment
일부의 경우
** Invoke db:reset (first_time)
** Invoke environment (first_time)
** Execute environment
ECHO app_env_vars.rb
ECHO environment.rb
** Invoke db:load_config (first_time)
** Execute db:load_config
** Execute db:reset
** Invoke db:drop (first_time)
** Invoke db:load_config
** Execute db:drop
** Invoke db:setup (first_time)
** Invoke db:schema:load_if_ruby (first_time)
** Invoke db:create (first_time)
** Invoke db:load_config
** Execute db:create
** Invoke environment
** Execute db:schema:load_if_ruby
** Invoke db:schema:load (first_time)
** Invoke environment
** Invoke db:load_config
** Execute db:schema:load
-- enable_extension("plpgsql")
-> 0.0772s
-- create_table("users", {:force=>true})
-> 0.0795s
-- add_index("users", ["email"], {:name=>"index_users_on_email", :unique=>true, :using=>:btree})
-> 0.0406s
-- initialize_schema_migrations_table()
-> 0.0829s
** Invoke db:structure:load_if_sql (first_time)
** Invoke db:create
** Invoke environment
** Execute db:structure:load_if_sql
** Invoke db:seed (first_time)
** Execute db:seed
** Invoke db:abort_if_pending_migrations (first_time)
** Invoke environment
** Execute db:abort_if_pending_migrations
** Execute db:setup
재설정 : 마이그레이션 :
여기** Invoke db:migrate:reset (first_time)
** Invoke db:drop (first_time)
** Invoke db:load_config (first_time)
** Execute db:load_config
** Execute db:drop
fe_sendauth: no password supplied
.
. # gem trace stuff...
.
Couldn't drop my_app_development
fe_sendauth: no password supplied
.
. # gem trace stuff...
.
Couldn't drop my_app_test
** Invoke db:create (first_time)
** Invoke db:load_config
** Execute db:create
fe_sendauth: no password supplied
.
. # gem trace stuff...
.
Couldn't create database for {"adapter"=>"postgresql", "encoding"=>"unicode", "database"=>"my_app_development", "host"=>"localhost", "pool"=>5, "password"=>nil}
fe_sendauth: no password supplied
.
. # gem trace stuff...
.
Couldn't create database for {"adapter"=>"postgresql", "encoding"=>"unicode", "database"=>"my_app_test", "host"=>"localhost", "pool"=>5, "password"=>nil}
** Invoke db:migrate (first_time)
** Invoke environment (first_time)
** Execute environment
ECHO app_env_vars.rb
ECHO environment.rb
** Invoke db:load_config
** Execute db:migrate
** Invoke db:_dump (first_time)
** Execute db:_dump
** Invoke db:schema:dump (first_time)
** Invoke environment
** Invoke db:load_config
** Execute db:schema:dump
** Execute db:migrate:reset
는 레이크 DB 대한 --trace이다 --trace 옵션 재설정 어떤 실행 전에 완료되면 db:migrate:reset
** Execute environment
은 몇 번의 실행 후 수행됩니다.
왜 application.yml을 사용하여 env 변수를 처리하지 않습니까? 그것은 상자에서 작동합니다. – socjopata
application.rb를 원하셨습니까? 이후 application.yml을 찾을 수 없습니다. 나는 레일을 사용하고있다 4.1.6 내가 '좋은 습관'이라고 이해하고 또한 github에 업로드 할 때 다른 회원이 중요한 정보를 보지 못하도록하기 때문에이 방법을 사용한다. – 12init
내 이해에서 env 변수는 응용 프로그램이 아니라 시스템 (os)에 정의되어 있습니다. 'DB_PASSWORD = 123 rake db : migrate' – lsaffie