[RUBY-ON-RAILS] 내 코드에서 레일 개발 환경에 대한 ENV 변수를 설정할 수 있습니까?
RUBY-ON-RAILS내 코드에서 레일 개발 환경에 대한 ENV 변수를 설정할 수 있습니까?
나는 통해 bash는 내 ENV 변수를 설정할 수 있다는 사실을 알고
export admin_password = "secret"
하지만 내 레일 소스 코드의 어딘가에서 그것을 할 수있는 방법은 무엇입니까? 내 첫 번째 시도는 환경 / development.rb이 같은 일을했다
ENV['admin_password'] = "secret"
그러나 그것은 작동하지 않았다. 이 작업을 수행 할 수있는 방법이 있나요?
해결법
-
==============================
1.[최신 정보]
[최신 정보]
"오래된 대답"의 솔루션은 일반적인 문제에 대한 작동하지만,이 부분은 당신의 코멘트에서 해명 한 후 특정 질문에 대답하는 것입니다.
당신은 당신의 질문에 지정 정확히 같은 환경 변수를 설정 할 수 있어야한다. 예를 들어, 나는 기본 인증을 사용하여 HTTP Heroku가 응용 프로그램을 가지고있다.
# app/controllers/application_controller.rb class ApplicationController < ActionController::Base protect_from_forgery before_filter :authenticate def authenticate authenticate_or_request_with_http_basic do |username, password| username == ENV['HTTP_USER'] && password == ENV['HTTP_PASS'] end end end # config/initializers/dev_environment.rb unless Rails.env.production? ENV['HTTP_USER'] = 'testuser' ENV['HTTP_PASS'] = 'testpass' end
따라서 귀하의 경우 다음을 사용
unless Rails.env.production? ENV['admin_password'] = "secret" end
구성이 다시로드되도록 서버를 다시 시작하는 것을 잊지 마세요!
[올드 대답]
응용 프로그램 전체 구성의 경우 다음과 같은 솔루션을 고려해 볼 수 있습니다 :
당신이 액세스 할 수 있도록하려면 옵션의 해시의 파일 설정 / application.yml 만들기 :
admin_password: something_secret allow_registration: true facebook: app_id: application_id_here app_secret: application_secret_here api_key: api_key_here
이제 파일 설정 / 초기화 / app_config.rb을 만들고 다음을 포함한다 :
require 'yaml' yaml_data = YAML::load(ERB.new(IO.read(File.join(Rails.root, 'config', 'application.yml'))).result) APP_CONFIG = HashWithIndifferentAccess.new(yaml_data)
다른 모든 데이터와 함께 : [admin_password 여기서] 이제 어디서나 응용 프로그램에서, 당신은 APP_CONFIG에 액세스 할 수 있습니다. (이니셜이 ERB.new이 포함되어 있기 때문에 참고, 당신 YAML 파일은 ERB 마크 업을 포함 할 수 있습니다.)
-
==============================
2.절대 하드 코드 민감한 정보 (계정 인증, 암호 등). 대신, 환경 변수 (키 / 값 쌍) 등의 정보를 저장하는 파일을 생성하고, 소스 코드 관리 시스템에서 해당 파일을 제외 할 수 있습니다. 예를 들어, 힘내 (소스 코드 관리 시스템)의 관점에서, .gitignore에 추가하여 해당 파일을 제외 :
절대 하드 코드 민감한 정보 (계정 인증, 암호 등). 대신, 환경 변수 (키 / 값 쌍) 등의 정보를 저장하는 파일을 생성하고, 소스 코드 관리 시스템에서 해당 파일을 제외 할 수 있습니다. 예를 들어, 힘내 (소스 코드 관리 시스템)의 관점에서, .gitignore에 추가하여 해당 파일을 제외 :
-bash> echo '/config/app_environment_variables.rb' >> .gitignore
/config/app_environment_variables.rb
ENV['HTTP_USER'] = 'devuser' ENV['HTTP_PASS'] = 'devpass'
잘 때, Application.initialize 라인을 라인을 필요로 사이 /config/environment.rb에 다음 줄을 추가 :
# Load the app's custom environment variables here, so that they are loaded before environments/*.rb app_environment_variables = File.join(Rails.root, 'config', 'app_environment_variables.rb') load(app_environment_variables) if File.exists?(app_environment_variables)
즉입니다!
주석 위에서 말했듯이,이 일을함으로써 당신은 환경 전 / *. RB를, 환경 변수를로드 할 것이다 당신이 그 파일 내부에 변수를 참조 할 수 있다는 것을 의미 (예를 들어, 환경 / production.rb). 이 / 설정 / 초기화 / 내부 환경 변수 파일을 퍼팅에 비해 큰 장점이다.
내부는 소스 코드 관리 시스템에이 파일을 커밋하지 않습니다 때문에 지금까지 개발 또는 생산 등으로 환경을 구별 할 필요가 따라서는 기본적으로 개발 상황입니다,이 없다 app_environment_variables.rb. 테스트 환경에 대한 설정 뭔가 특별한 필요하지만 (또는 로컬 생산 모드를 테스트 할 경우를 위해), 단지 다른 모든 변수 아래 조건 블록을 추가 :
if Rails.env.test? ENV['HTTP_USER'] = 'testuser' ENV['HTTP_PASS'] = 'testpass' end if Rails.env.production? ENV['HTTP_USER'] = 'produser' ENV['HTTP_PASS'] = 'prodpass' end
당신이 app_environment_variables.rb 업데이트 할 때마다 응용 프로그램 서버를 다시 시작합니다. 아파치 / 승객의 좋아하는을 사용하거나 서버를 레일하는 가정 :
-bash> touch tmp/restart.txt
다음과 같이 코드에서 환경 변수를 참조하십시오
def authenticate authenticate_or_request_with_http_basic do |username, password| username == ENV['HTTP_USER'] && password == ENV['HTTP_PASS'] end end
내부 app_environment_variables.rb 당신이 문자열로 논리 값과 숫자를 지정해야합니다 (단지 거짓하지 예를 들어, ENV [ 'SEND_MAIL'] = '거짓'을, 그리고 ENV [ '시간 초과'] = '30'30되지 않음), 그렇지 않으면 당신은 얻을 것이다 주 오류는 문자열로 거짓을 변환 할 수 없습니다 각각의 문자열로 Fixnum이라는 변환 할 수 없습니다.
저장 및 민감한 정보를 공유
넥타이의 마지막 매듭은 다음과 같습니다 고객 및 / 또는 파트너와 민감한 정보를 공유하는 방법을? 비즈니스 연속성의 목적 (즉, 당신이 떨어지는 별에 치여 죽게 언제, 어떻게 고객 및 / 또는 파트너 사이트의 전체 작업을 재개 할 것인가?), 고객 및 / 또는 파트너 앱에 필요한 모든 자격 증명을 알아야 . 이메일 전송 / 주변이 일을 Skyping은 혼란에 불안과 리드입니다. (모두가 HTTPS를 사용하는 경우)하지만, 응용 프로그램은 저장하고 이상적 일 것이다 암호 같은 작은 titbits를 공유 전용 공유 Google 문서 도구에 저장하는 것은 나쁘지 않습니다.
Heroku가에 환경 변수를 설정하는 방법
당신에게 Heroku에서 단일 환경을 사용하는 경우 :
-bash> heroku config:add HTTP_USER='herouser' -bash> heroku config:add HTTP_USER='heropass'
당신은 Heroku가 여러 환경이있는 경우 :
-bash> heroku config:add HTTP_USER='staguser' --remote staging -bash> heroku config:add HTTP_PASS='stagpass' --remote staging -bash> heroku config:add HTTP_USER='produser' --remote production -bash> heroku config:add HTTP_PASS='prodpass' --remote production
포먼과 .env의
많은 개발자 (서버를 아파치 / 승객의 좋아하는 사용에 반대 또는 레일로) 로컬 앱을 실행합니다 (Heroku가 툴 벨트와 함께 설치) 감독을 사용합니다. Heroku가 로컬 디바이스의 전환은 그런 측면에서 원활한는 그래서 명령, 응용 프로그램에서 실행되는 것을 선언 포먼과 Heroku가 사용 Procfile. 이 편리 큰 그래서 나는 모든 레일 프로젝트에 포먼과 Heroku가를 사용합니다. 그러나 여기에 일이 .. 포먼 부하 환경 변수가 /.env를 통해 dotenv에 저장하지만 불행히도 필수적으로 키 = 값 쌍의 파일을 구문 분석 dotenv입니다; 이미 설정된 변수 (일 건조한 상태로 유지하기 위해)를 참조 할 수 있도록 그 쌍, 변수 바로 다음이되지 않습니다 없으며에서 "루비"를 할 수 있습니다합니다 (조건문과 위에서 언급 한 바와 같이)하는 당신이 할 수있는 /config/app_environment_variables.rb에서 할. 예를 들어, 일을 유지하는 측면에서 가끔 이런 식으로 물건을 할 DRY :
ENV['SUPPORT_EMAIL']='Company Support <support@company.com>' ENV['MAILER_DEFAULT_FROM'] = ENV['SUPPORT_EMAIL'] ENV['MAILER_DEFAULT_TO'] = ENV['SUPPORT_EMAIL']
따라서, 나는 로컬 내 응용 프로그램을 실행하는 데 포어를 사용하지만 로딩 환경 변수에 대한 .env의 파일을 사용하지 않습니다 오히려 I는 전술 /config/app_environment_variables.rb 접근법과 함께 포어를 사용한다.
-
==============================
3.방법은 내가 실제로 작동하는 내 질문에 이렇게 노력하고 있어요!
방법은 내가 실제로 작동하는 내 질문에 이렇게 노력하고 있어요!
# environment/development.rb ENV['admin_password'] = "secret"
난 그냥 서버를 다시 시작했다. 나는 다시로드를 실행하는 생각! 레일 콘솔은 충분하다 그러나 나는 또한 웹 서버를 다시 시작했다.
나는 이것이 넣고 ENV 변수를 설정하는 더 나은 장소입니다 느끼기 때문에 나는 내 자신의 대답을 따기입니다
-
==============================
4.특정 개발 서버를 사용하는 경우 제쳐두고 여기에 솔루션으로, 청소기 대안이있다.
특정 개발 서버를 사용하는 경우 제쳐두고 여기에 솔루션으로, 청소기 대안이있다.
Heroku가의 감독으로, 당신은 .env의 파일 당 프로젝트 환경 변수를 만들 수 있습니다 :
ADMIN_PASSOWRD="secret"
탕으로, 당신은 .powenv 파일을 사용할 수 있습니다 :
export ADMIN_PASSOWRD="secret"
-
==============================
5.나는 가장 좋은 방법은 몇 가지 YML 파일에 저장 한 후 intializer 파일에이 명령을 사용하여 해당 파일을로드하는 것입니다 생각
나는 가장 좋은 방법은 몇 가지 YML 파일에 저장 한 후 intializer 파일에이 명령을 사용하여 해당 파일을로드하는 것입니다 생각
APP_CONFIG = YAML.load_file("#{Rails.root}/config/CONFIG.yml")[Rails.env].to_hash
당신은 쉽게 액세스 환경 설정 변수를 관련 수 있습니다.
귀하의 YML 파일 키 값 구조 :
development: app_key: 'abc' app_secret: 'abc' production: app_key: 'xyz' app_secret: 'ghq'
-
==============================
6.시스템 환경과 레일 '환경은 여러 가지입니다. ENV는 레일 '환경에서 작동하자,하지만 당신이 원하는 것은 런타임 시스템의 환경을 변경하는 경우는 역 따옴표로 명령을 둘러싸고 있습니다.
시스템 환경과 레일 '환경은 여러 가지입니다. ENV는 레일 '환경에서 작동하자,하지만 당신이 원하는 것은 런타임 시스템의 환경을 변경하는 경우는 역 따옴표로 명령을 둘러싸고 있습니다.
# ruby code `export admin_password="secret"` # more ruby code
-
==============================
7.사용자 정의 .env의 파일의 로딩을위한 스크립트 : (가) 라인을 필요로하고, Application.initialize 라인 사이 /config/environment.rb에 다음 줄을 추가합니다 :
사용자 정의 .env의 파일의 로딩을위한 스크립트 : (가) 라인을 필요로하고, Application.initialize 라인 사이 /config/environment.rb에 다음 줄을 추가합니다 :
# Load the app's custom environment variables here, so that they are loaded before environments/*.rb app_environment_variables = File.join(Rails.root, 'config', 'local_environment.env') if File.exists?(app_environment_variables) lines = File.readlines(app_environment_variables) lines.each do |line| line.chomp! next if line.empty? or line[0] == '#' parts = line.partition '=' raise "Wrong line: #{line} in #{app_environment_variables}" if parts.last.empty? ENV[parts.first] = parts.last end end
그리고 설정 / local_environment.env처럼 보일 것이다 (당신은 그것을 .gitignore 할 것) :
# This is ignored comment DATABASE_URL=mysql2://user:psw@0.0.0:3307/database RACK_ENV=development
(@ user664833 용액 기준)
from https://stackoverflow.com/questions/4911607/is-it-possible-to-set-env-variables-for-rails-development-environment-in-my-code by cc-by-sa and MIT license
'RUBY-ON-RAILS' 카테고리의 다른 글
[RUBY-ON-RAILS] 어떻게 레일 액티브의 모델의 속성에 대한 기본값을 만들려면 어떻게해야합니까? [복제] (0) | 2020.02.10 |
---|---|
[RUBY-ON-RAILS] 어떻게 레일에서 셋업 JQuery와 - UI를 자동 완성으로 (0) | 2020.02.10 |
[RUBY-ON-RAILS] 레이크 dB : 스키마 : 부하 대 마이그레이션 (0) | 2020.02.10 |
[RUBY-ON-RAILS] 어떻게 활성 링크를 표시 트위터 부트 스트랩 탐색을 얻으려면? (0) | 2020.02.10 |
[RUBY-ON-RAILS] 더 하나 개의 속성보다 find_or_create_by 레일? (0) | 2020.02.10 |