2017-04-26 15 views
1

Heroku Labs에서 설정 한 값 중 하나 인 Dyno Metadata addon (https://devcenter.heroku.com/articles/dyno-metadata)을 기반으로 캐시 키를 사용하여 파일을 레일 캐시에로드하려고합니다.슬러그 빌드 프로세스 중에 내 레일 앱이 Heroku가 설정 한 ENV 변수에 액세스 할 수 있습니까?

이 기사에서는 슬러그 빌드 프로세스에서 초기에 사용할 수있는 고유 한 식별자를 찾고 있습니다.

HEROKU_RELEASE_CREATED_AT: 2015-04-02T18:00:42Z HEROKU_RELEASE_VERSION: v42 HEROKU_SLUG_COMMIT: 2c3a0b24069af49b3de35b8e8c26765c1dba9ff0

은 (위의 예 데이터) 나에게 약간의 관심의 세 가지입니다. 자산 미리 컴파일 단계에서 위의 3 중 하나를 사용하기로 결정한 고유 한 값에 의존합니다. 이 단계는 내 레일 앱이 작동하기 전에 완료됩니다.

처음에는 HEROKU_RELEASE_VERSION을 시도했지만 슬러그 빌드 프로세스가 완료 될 때까지 설정되지 않은 것으로 나타났습니다. 이는 자산 미리 컴파일 단계에서 완료 되었기 때문에 nil입니다.

자산 사전 컴파일 전에 알고 있는지 확인하려면 HEROKU_SLUG_COMMIT을 시도합니다. 이 올바른지? 일부 초기 테스트에서 제대로 작동하는 것으로 보입니다. (자산 사전 컴파일 전에는 알 수 없지만) 올바른 순서를 알고 싶습니다.

ENV[]에서 사용할 수있는 이전 값이 아닌 경우 더 좋은 제안은 무엇입니까?

====== UPDATE :

나는 값으로 아래의 구성으로 장난되었습니다 내가 발견 한

HEROKU_RELEASE_CREATED_AT: 2015-04-02T18:00:42Z HEROKU_RELEASE_VERSION: v42 HEROKU_SLUG_COMMIT: 2c3a0b24069af49b3de35b8e8c26765c1dba9ff0

그 자산, 그 위의 값을 구축하기 전에 사전 빌드를 변경하지 말고 빌드를 변경하십시오. 아래에 출력 결과가 아래와 같습니다. 보시다시피 현재 배포는 2583508이지만 응용 프로그램이 완료 될 때까지 빌드 프로세스 중에 ENV['HEROKU_SLUG_COMMIT']8318914을 반환하면 ENV['HEROKU_SLUG_COMMIT']2583508으로 업데이트됩니다.

=== sample-app Releases - Current: v356 
v356 Deploy 2583508 [email protected] 2017/04/26 20:05:51 -0400 (~ 40s ago) 
v355 Deploy 8318914 [email protected] 2017/04/26 19:51:33 -0400 (~ 14m ago) 
v354 Deploy c054f1e [email protected] 2017/04/26 19:40:42 -0400 (~ 25m ago) 

BROWSER RESTRICTIONS SLUG COMMIT: 83189141e4e45643bf71d9aa78604e479ea210f1 

실제로 빌드하기 전에 현재 빌드를 고유하게 알 수있는 방법이 있습니까? heroku lab addon을 사용하지 않았을 수 있습니까?

답변

1

나는 코드 밀어 전에 새 커밋 해시 내 응용 프로그램을 업데이트 할 Heroku가-CLI 도구를 배포] 스크립트를 사용하여 사용하여 자신을 위해이 문제를 해결 한 :

deploy.sh을

... 
heroku config:set APP_VERSION=<commit hash> --app <your app name> 
git push heroku master 
... 
1

나는 내가 찾고있는 요구를 해결하는듯한 Heroku 지원으로부터 응답을 받았습니다.

에게 Heroku의 응답 :

불행하게도,이 시점에서, 우리 다이노 메타 데이터 실험실 플래그와 설정은 빌드하는 동안 사용할 바르 완전히 일치하지 않습니다. 빌드 중에 커밋 해시가 될 SOURCE_VERSION 환경 변수 을 사용할 수 있습니다. 그런 다음 런타임에 HEROKU_SLUG_COMMIT을 사용하여 동일한 값을 얻을 수 있습니다.

이 차이의 원인은 대부분 문맥의 차이입니다. 빌드 중에 변수 HEROKU_SLUG_COMMIT의 이름을 지정하면 슬러그가 아니기 때문에 을 의미하지 않게됩니다.

우리는 두 설정 바를 절대 설정하지 않으므로 을 사용할 수 있어야하며 설정되지 않은 경우에는 다른 쪽으로 폴백해야합니다.

현재 구현은 ENV["SOURCE_VERSION"] || ENV['HEROKU_SLUG_COMMIT']입니다. 이것은 나를 위해 작동합니다.