복붙노트

[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. ==============================

    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. ==============================

    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. ==============================

    3.버전 제어를 설정 / secrets.yml 추가하고 다시 배포합니다. 파일을 커밋 할 수 있도록 .gitignore에서 선을 제거 할 필요가있을 수 있습니다.

    버전 제어를 설정 / secrets.yml 추가하고 다시 배포합니다. 파일을 커밋 할 수 있도록 .gitignore에서 선을 제거 할 필요가있을 수 있습니다.

    나는이 동일한 문제를했고 그것은 단지 Github에서 .gitignore 상용구가 설정 / secrets.yml 포함 내 레일 응용 프로그램에 대해 만든 밝혀졌다.

  4. ==============================

    4.이것은 나를 위해 일했다.

    이것은 나를 위해 일했다.

    간부 레이크 비밀 또는 레이크 비밀 번들 실행 현재 디렉토리에 프로덕션 서버와 CD로 SSH는 해당 문자열을 복사, 출력으로 긴 문자열을 얻을 것이다.

    이제 sudo는 나노의 / etc / 환경을 실행합니다.

    파일의 맨 아래에 붙여 넣기

    export SECRET_KEY_BASE=rake secret
    ruby -e 'p ENV["SECRET_KEY_BASE"]'
    

    레이크 비밀 방금 복사 한 문자열 인 경우, 레이크 비밀의 장소에 복사 된 문자열을 붙여 넣습니다.

    에코 $ SECRET_KEY_BASE을 실행하여 서버를 다시 시작하고 테스트합니다.

  5. ==============================

    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. ==============================

    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. ==============================

    7.제가 한 : 내 프로덕션 서버에, 나는 얇은위한 설정 파일 (confthin.yml)을 생성 (내가 사용하고)하고 다음 정보를 추가 :

    제가 한 : 내 프로덕션 서버에, 나는 얇은위한 설정 파일 (confthin.yml)을 생성 (내가 사용하고)하고 다음 정보를 추가 :

    environment: production
    user: www-data
    group: www-data
    SECRET_KEY_BASE: mysecretkeyproduction
    

    나는 다음 앱을 실행

    thin start -C /whereeveristhefieonprod/configthin.yml
    

    매력 다음 필요없이 같은 작업은 버전 제어에 비밀 키를 가지고하는

    그것은 도움이 될 희망하지만, 나는 확실히 같은 일이 유니콘과 다른 사람들과 함께 할 수 있어요.

  8. ==============================

    8.내 경우, 문제는 설정 / master.key 버전 제어에 없었다, 그리고 내가 다른 컴퓨터에서 프로젝트를 만들었다.

    내 경우, 문제는 설정 / master.key 버전 제어에 없었다, 그리고 내가 다른 컴퓨터에서 프로젝트를 만들었다.

    그 레일 .gitignore 기본값은 제외이 파일을 만듭니다. 그것은이 파일을하지 않고 배포하는 것은 불가능하기 때문에, 어떤 팀 구성원의 컴퓨터에서 배포 할 수 있도록하기 위해, 버전 제어에 있어야합니다.

    해결 방법 : 프로젝트가 생성 된 컴퓨터에서 파일을 커밋 .gitignore에서 설정 / master.key 라인을 제거하고, 지금은 그것에서 다른 컴퓨터와 배포에 풀을 이눔 수 있습니다.

    사람들은 대안 솔루션을 제공하지 않고, 버전 컨트롤에 이러한 파일의 일부를 저지하지 말. 당신이 오픈 소스 프로젝트에 참여하지 않는 한, 나는 자격 증명을 포함하여 프로젝트를 실행하는 데 필요한 모든 일들을 저지하지 않을 이유를 볼 수 없습니다.

  9. ==============================

    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. ==============================

    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. ==============================

    11.이 https://gist.github.com/pablosalgadom/4d75f30517edc6230a67 작품의 좋은 루트 사용자는 편집해야합니다 위해

    이 https://gist.github.com/pablosalgadom/4d75f30517edc6230a67 작품의 좋은 루트 사용자는 편집해야합니다 위해

    $ /etc/profile
    

    당신은 비 루트 넣어하는 경우는 있지만, 다음의 코드를 생성

    $ ~/.bash_profile
    
    $ ~/.bash_login
    
    $ ~/.profile
    
  12. ==============================

    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. ==============================

    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. ==============================

    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
    
  15. 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