[RUBY-ON-RAILS] " ''생산 '환경에 대한 secret_key_base` 없음"오류를 해결하는 방법 (4.1 레일)
RUBY-ON-RAILS" ''생산 '환경에 대한 secret_key_base` 없음"오류를 해결하는 방법 (4.1 레일)
나는 처음부터, 레일 4.1을 사용하여 Rails 애플리케이션을 생성하고 내가 해결할 수없는임을 이상한 문제에 직면하고있다.
때마다 나는 오류 500 얻을 Heroku가 나는 내 응용 프로그램을 배포하려고 :
Missing `secret_key_base` for 'production' environment, set this value in `config/secrets.yml`
secret.yml 파일은 다음과 같은 구성이 포함되어 있습니다
secret_key_base: <%= ENV["SECRET_KEY_BASE"] %>
Heroku가에 나는 레이크 비밀 명령의 결과로 "SECRET_KEY_BASE"환경 변수를 구성했습니다. 내가 Heroku가 설정 시작, 내가 올바른 이름과 값을 가지는 변수를 볼 수 있습니다.
왜 나는 아직도이 오류는 무엇입니까?
해결법
-
==============================
1.저도 같은 문제가 있었 내가 프로덕션 서버에 로그인 할 때마다로드 할 환경 변수를 작성하여 그것을 해결하고, 그것을 구성하는 단계의 미니 가이드를 만든 :
저도 같은 문제가 있었 내가 프로덕션 서버에 로그인 할 때마다로드 할 환경 변수를 작성하여 그것을 해결하고, 그것을 구성하는 단계의 미니 가이드를 만든 :
나는 유니콘 v4.8.2로 레일 4.1을 사용하고 있었고, 난 내 응용 프로그램을 배포하려고 할 때 제대로 시작되지 않았고 unicorn.log 파일에 나는이 오류 메시지가 발견 :
app error: Missing `secret_key_base` for 'production' environment, set this value in `config/secrets.yml` (RuntimeError)
몇 가지 조사 후 나는 레일 4.1 당신이 exampleRailsProject에있는 secrets.yml 파일을 읽을 그렇다면, SECRET_KEY을 관리 할 수있는 방법을 변경 것을 발견 / 설정 / 당신이 뭔가를 찾을 수 있습니다 secrets.yml :
# Do not keep production secrets in the repository, # instead read values from the environment. production: secret_key_base: <%= ENV["SECRET_KEY_BASE"] %>
이 수단 레일은 프로덕션 서버에서 secret_key_base에 대한 환경 변수를 사용하도록 권장하는. 이 오류를 해결하기 위해 당신은 당신의 프로덕션 서버에서 (내 경우 우분투) 리눅스에 대한 환경 변수를 만들려면 다음이 단계를 수행해야합니다 :
프로덕션 서버에 다시 쉘 및 로그인을 닫을 때 당신은 그것을 사용할 준비가이 환경 변수를 설정하고있을 것이다.
그리고 그게 다야! 나는이 미니 가이드는이 오류를 해결하는 데 도움이되기를 바랍니다.
면책 조항 : 나는 당신이 뭔가 잘못이나 내가 그것을 해결하기 위해 기꺼이 것입니다 오류를 찾을 수 있도록하는 경우, Linux 또는 레일 전문가 아니에요.
-
==============================
2.난 당신이 secrets.yml 소스 컨트롤에 체크인하지 않아도 가정거야 (예.는 .gitignore 파일에 있어요). 이 상황이 아닌 경우에도 그들의 코드는 Github에서 노출이 자신의 비밀 키 주위에 떠을 원하지 않기 때문에,이 질문을보고 많은 사람들이 한 일입니다.
난 당신이 secrets.yml 소스 컨트롤에 체크인하지 않아도 가정거야 (예.는 .gitignore 파일에 있어요). 이 상황이 아닌 경우에도 그들의 코드는 Github에서 노출이 자신의 비밀 키 주위에 떠을 원하지 않기 때문에,이 질문을보고 많은 사람들이 한 일입니다.
이 소스 제어에 없을 경우, Heroku가 그것에 대해 알 수 없습니다. 레일 그래서 Rails.application.secrets.secret_key_base를 찾고 및 레일이 존재하지 않는 secrets.yml 파일을 확인하여 설정하기 때문에이 설정을하지 않았다. 간단한 해결 방법은 사용자의 설정 / 환경 / production.rb 파일로 이동하여 다음 라인을 추가하는 것입니다 :
Rails.application.configure do ... config.secret_key_base = ENV["SECRET_KEY_BASE"] ... end
이 환경 변수를 사용하는 대신 secrets.yml에서 찾고 비밀 키를 설정하여 응용 프로그램을 알려줍니다. 그것은 저에게이 최대의 앞을 알 수 많은 시간을 저장 한 것입니다.
-
==============================
3.버전 제어를 설정 / secrets.yml 추가하고 다시 배포합니다. 파일을 커밋 할 수 있도록 .gitignore에서 선을 제거 할 필요가있을 수 있습니다.
버전 제어를 설정 / secrets.yml 추가하고 다시 배포합니다. 파일을 커밋 할 수 있도록 .gitignore에서 선을 제거 할 필요가있을 수 있습니다.
나는이 동일한 문제를했고 그것은 단지 Github에서 .gitignore 상용구가 설정 / secrets.yml 포함 내 레일 응용 프로그램에 대해 만든 밝혀졌다.
-
==============================
4.이것은 나를 위해 일했다.
이것은 나를 위해 일했다.
간부 레이크 비밀 또는 레이크 비밀 번들 실행 현재 디렉토리에 프로덕션 서버와 CD로 SSH는 해당 문자열을 복사, 출력으로 긴 문자열을 얻을 것이다.
이제 sudo는 나노의 / etc / 환경을 실행합니다.
파일의 맨 아래에 붙여 넣기
export SECRET_KEY_BASE=rake secret ruby -e 'p ENV["SECRET_KEY_BASE"]'
레이크 비밀 방금 복사 한 문자열 인 경우, 레이크 비밀의 장소에 복사 된 문자열을 붙여 넣습니다.
에코 $ SECRET_KEY_BASE을 실행하여 서버를 다시 시작하고 테스트합니다.
-
==============================
5.당신이 다른 답변과 같은 이니셜 라이저를 사용할 수 있지만, 기존의 레일 4.1 방법은 설정 / secrets.yml 사용하는 것입니다. 이를 소개하는 레일 팀에 대한 이유는이 대답하지만, TL의 범위를 넘어, DR 그 secret_token.rb conflates 구성 및 코드뿐만 아니라 토큰이 소스 제어 역사와 유일한 시스템으로 선택되어 있기 때문에 보안 위험이있는 등입니다 요구는 생산 인프라 토큰 생산 비밀을 알고있다.
당신이 다른 답변과 같은 이니셜 라이저를 사용할 수 있지만, 기존의 레일 4.1 방법은 설정 / secrets.yml 사용하는 것입니다. 이를 소개하는 레일 팀에 대한 이유는이 대답하지만, TL의 범위를 넘어, DR 그 secret_token.rb conflates 구성 및 코드뿐만 아니라 토큰이 소스 제어 역사와 유일한 시스템으로 선택되어 있기 때문에 보안 위험이있는 등입니다 요구는 생산 인프라 토큰 생산 비밀을 알고있다.
당신이 소스 제어 중 하나를 설정 / database.yml을 추가 할 것 같은 당신은 많은 .gitignore에이 파일을 추가해야합니다.
설정에 대한 참조 Heroku가 자신의 코드를 설정 / database.yml을 DATABASE_URL에서 루비에 대한 자신의 Buildpack에, 나는 그들의 REPO를 분기 결국 및 설정 / secrets.yml SECRETS_KEY_BASE 환경 변수에서 생성을 수정했습니다.
이 기능은 레일 4.1에 소개 된 이후, 나는 그것이 편집 ./lib/language_pack/rails41.rb에 적합하다고 생각하고이 기능을 추가 할 수 있습니다.
다음은 내가 내 회사에서 만든 수정 buildpack에서 코드 조각입니다 :
class LanguagePack::Rails41 < LanguagePack::Rails4 # ... def compile instrument "rails41.compile" do super allow_git do create_secrets_yml end end end # ... # writes ERB based secrets.yml for Rails 4.1+ def create_secrets_yml instrument 'ruby.create_secrets_yml' do log("create_secrets_yml") do return unless File.directory?("config") topic("Writing config/secrets.yml to read from SECRET_KEY_BASE") File.open("config/secrets.yml", "w") do |file| file.puts <<-SECRETS_YML <% raise "No RACK_ENV or RAILS_ENV found" unless ENV["RAILS_ENV"] || ENV["RACK_ENV"] %> <%= ENV["RAILS_ENV"] || ENV["RACK_ENV"] %>: secret_key_base: <%= ENV["SECRET_KEY_BASE"] %> SECRETS_YML end end end end # ... end
당신은 물론 당신의 환경 변수의 오프 읽을 수 있도록 다른 비밀 (등 예를 들어, 타사 API 키를) 추가하려면이 코드를 확장 할 수 있습니다 :
... <%= ENV["RAILS_ENV"] || ENV["RACK_ENV"] %>: secret_key_base: <%= ENV["SECRET_KEY_BASE"] %> third_party_api_key: <%= ENV["THIRD_PARTY_API"] %>
이 방법을 사용하면 매우 표준적인 방법으로이 비밀에 액세스 할 수 있습니다 :
Rails.application.secrets.third_party_api_key
귀하의 응용 프로그램을 다시 배포하기 전에 먼저 환경 변수를 설정해야합니다 :
그런 다음 수정 buildpack를 추가 (또는 더 내 링크에 오신 것을 환영합니다 이상입니다) 당신에게 Heroku 앱 (Heroku가의 설명서를 참조)하고 응용 프로그램을 다시 배포합니다.
buildpack가 자동으로 생성됩니다 설정 / secrets.yml 다이노 빌드 프로세스의 일부로 당신에게 Heroku에 밀어 자식마다 같은 환경 변수에서.
편집 : Heroku가 자신의 문서는 환경 변수에서 읽을 설정 / secrets.yml 만들 것을 제안하지만 당신이 소스 제어에이 파일을 확인해야합니다 의미한다. 내 경우에는이 내가 오히려 체크인 할 거라고 개발을위한 비밀 및 테스트 환경을 하드 코딩했기 때문에 잘 작동하지 않습니다.
-
==============================
6.당신은 당신의 서버의 ~ / .bashrc에 또는 ~ / .bash_profile에에 환경 변수로 비밀 키를 내보낼 수 있습니다 :
당신은 당신의 서버의 ~ / .bashrc에 또는 ~ / .bash_profile에에 환경 변수로 비밀 키를 내보낼 수 있습니다 :
export SECRET_KEY_BASE = "YOUR_SECRET_KEY"
그리고, 당신은 당신의 .bashrc 또는 .bash_profile에 소스 수 있습니다 :
source ~/.bashrc source ~/.bash_profile
당신의 secrets.yml를 저지하지 마십시오
-
==============================
7.제가 한 : 내 프로덕션 서버에, 나는 얇은위한 설정 파일 (confthin.yml)을 생성 (내가 사용하고)하고 다음 정보를 추가 :
제가 한 : 내 프로덕션 서버에, 나는 얇은위한 설정 파일 (confthin.yml)을 생성 (내가 사용하고)하고 다음 정보를 추가 :
environment: production user: www-data group: www-data SECRET_KEY_BASE: mysecretkeyproduction
나는 다음 앱을 실행
thin start -C /whereeveristhefieonprod/configthin.yml
매력 다음 필요없이 같은 작업은 버전 제어에 비밀 키를 가지고하는
그것은 도움이 될 희망하지만, 나는 확실히 같은 일이 유니콘과 다른 사람들과 함께 할 수 있어요.
-
==============================
8.내 경우, 문제는 설정 / master.key 버전 제어에 없었다, 그리고 내가 다른 컴퓨터에서 프로젝트를 만들었다.
내 경우, 문제는 설정 / master.key 버전 제어에 없었다, 그리고 내가 다른 컴퓨터에서 프로젝트를 만들었다.
그 레일 .gitignore 기본값은 제외이 파일을 만듭니다. 그것은이 파일을하지 않고 배포하는 것은 불가능하기 때문에, 어떤 팀 구성원의 컴퓨터에서 배포 할 수 있도록하기 위해, 버전 제어에 있어야합니다.
해결 방법 : 프로젝트가 생성 된 컴퓨터에서 파일을 커밋 .gitignore에서 설정 / master.key 라인을 제거하고, 지금은 그것에서 다른 컴퓨터와 배포에 풀을 이눔 수 있습니다.
사람들은 대안 솔루션을 제공하지 않고, 버전 컨트롤에 이러한 파일의 일부를 저지하지 말. 당신이 오픈 소스 프로젝트에 참여하지 않는 한, 나는 자격 증명을 포함하여 프로젝트를 실행하는 데 필요한 모든 일들을 저지하지 않을 이유를 볼 수 없습니다.
-
==============================
9.나는 secret_key_base가 비어있을 수 있도록함으로써 나는 나 기존 키 생성기 (그리고 레일 3 따라서 이전 버전과 세션 호환성)를 사용하여 계속 수 있도록 레일 4.1 응용 프로그램에 사용했다고 패치가 있습니다.
나는 secret_key_base가 비어있을 수 있도록함으로써 나는 나 기존 키 생성기 (그리고 레일 3 따라서 이전 버전과 세션 호환성)를 사용하여 계속 수 있도록 레일 4.1 응용 프로그램에 사용했다고 패치가 있습니다.
Rails::Application.class_eval do # the key_generator will then use ActiveSupport::LegacyKeyGenerator.new(config.secret_token) fail "I'm sorry, Dave, there's no :validate_secret_key_config!" unless instance_method(:validate_secret_key_config!) def validate_secret_key_config! #:nodoc: config.secret_token = secrets.secret_token if config.secret_token.blank? raise "Missing `secret_token` for '#{Rails.env}' environment, set this value in `config/secrets.yml`" end end end
나는 포맷 패치 끌어 오기 요청으로 레일에 제출 한 이후
-
==============================
10.제가 설정 / 초기화 / secret_key.rb 파일을 만든 내가 코드의 라인 다음 만 썼다 :
제가 설정 / 초기화 / secret_key.rb 파일을 만든 내가 코드의 라인 다음 만 썼다 :
Rails.application.config.secret_key_base = ENV["SECRET_KEY_BASE"]
하지만 @Erik Trautman 게시 한 해당 솔루션이 더 우아한라고 생각합니다)
편집하다: 아, 그리고 마지막으로 내가 Heroku가에이 조언을 발견 https://devcenter.heroku.com/changelog-items/426 :)
즐겨!
-
==============================
11.이 https://gist.github.com/pablosalgadom/4d75f30517edc6230a67 작품의 좋은 루트 사용자는 편집해야합니다 위해
이 https://gist.github.com/pablosalgadom/4d75f30517edc6230a67 작품의 좋은 루트 사용자는 편집해야합니다 위해
$ /etc/profile
당신은 비 루트 넣어하는 경우는 있지만, 다음의 코드를 생성
$ ~/.bash_profile $ ~/.bash_login $ ~/.profile
-
==============================
12.Nginx의 ON / 여객 / 루비 (2.4)은 / 레일 (5.1.1) 아무것도 다른 사람을 제외하고 일했다 :
Nginx의 ON / 여객 / 루비 (2.4)은 / 레일 (5.1.1) 아무것도 다른 사람을 제외하고 일했다 :
서버 블록 / 등은 /의 nginx / 사이트-가능 / 기본값에 passenger_env_var.
출처 : https://www.phusionpassenger.com/library/config/nginx/reference/#passenger_env_var
-
==============================
13.데미 동방의 세 박사의 단수형의 대답은 레일 5까지 날 위해 일했습니다.
데미 동방의 세 박사의 단수형의 대답은 레일 5까지 날 위해 일했습니다.
아파치에 / 여객 / 루비 (2.4) / 레일 (5.1.6), 내가 넣어했다
export SECRET_KEY_BASE=GENERATED_CODE
데미 동방의 세 박사의 단수형 응답에서 등 / 등 / 아파치 / envvars, 원인 /에 / 프로파일은 무시 될 것으로 보인다.
출처 : https://www.phusionpassenger.com/library/indepth/environment_variables.html#apache
-
==============================
14.내가 https://github.com/github/gitignore/blob/master/Rails.gitignore에서 .gitignore 파일을 사용 후 저도 같은 문제가 있었다
내가 https://github.com/github/gitignore/blob/master/Rails.gitignore에서 .gitignore 파일을 사용 후 저도 같은 문제가 있었다
나는 .gitignore 파일에 다음 줄을 주석 한 후 모든 미세을했다.
config/initializers/secret_token.rb config/secrets.yml
from https://stackoverflow.com/questions/23180650/how-to-solve-error-missing-secret-key-base-for-production-environment-rai by cc-by-sa and MIT license
'RUBY-ON-RAILS' 카테고리의 다른 글
[RUBY-ON-RAILS] 레일에 대한 해제 액티브 4 (0) | 2020.02.05 |
---|---|
[RUBY-ON-RAILS] 클립에 의해 URL에서 이미지 저장 (0) | 2020.02.05 |
[RUBY-ON-RAILS] 고유 객체 ID 필드 대 복합 기본 키 (0) | 2020.02.05 |
[RUBY-ON-RAILS] 액티브, has_many : 통해, 그리고 다형성 협회 (0) | 2020.02.05 |
[RUBY-ON-RAILS] 레일 : update_attributes 대 update_attribute (0) | 2020.02.05 |