Một giải pháp là sử dụng móc trước git để đặt giá trị cấu hình heroku. Kể từ khi nó được thực hiện trước khi đẩy và biên dịch slug, biến cấu hình sẽ có sẵn như là một var ENV để ứng dụng đường ray của bạn.
.git/hooks/pre-push:
#!/bin/sh
remote="$1"
url="$2"
while read local_ref local_sha remote_ref remote_sha
do
if [[ $url =~ heroku ]] ; then
app=$(git remote show -n $remote | sed -n -E -e 's/[[:space:]]+(Push[[:space:]]+URL)(\/|:).+(:|\/)(.*)\.git$/\4/gp')
echo Setting RAILS_CACHE_ID to $local_sha on app $app
heroku config:set RAILS_CACHE_ID=$local_sha --app $app
fi
done
exit 0
Các tập tin trước push.sample có một số tài liệu về các thông số mà móc được gọi với. Tôi đang sử dụng đầu ra chi tiết của git từ xa để xác định ứng dụng nào để đặt giá trị cấu hình. Tùy chọn '-E' cho sed là dành cho Mac OS X - nếu bạn đang sử dụng GNU sed thay thế bằng '-r'.
Một giải pháp khác là sử dụng heroku-api thông qua tập lệnh profile.d để lấy id phát hành duy nhất. Ví dụ này sử dụng curl để lấy id phát hành mới nhất bằng cách sử dụng tiêu đề RANGE. Nó không phải là tham chiếu cam kết nhưng nó sẽ là duy nhất cho mọi bản phát hành, bao gồm cả các lần quay lại và thay đổi cấu hình. Bạn sẽ muốn đặt API_KEY và APP_NAME làm biến cấu hình heroku.
.profile.d/release.sh
# get release id and set as RAILS_CACHE_ID
# Heroku config variables that need to be set
# API_KEY: heroku api key (get from dashboard or `heroku auth:token`
# APP_NAME: set this to your app_name (this could be hardcoded in the profile.d script but
# would make it harder to manage apps with multiple environments
res=$(curl -s -H "Accept: application/vnd.heroku+json; version=3"\
-H "Authorization: Bearer $API_KEY"\
-H "Range: version ..; order=desc, max=1"\
-X GET https://api.heroku.com/apps/$APP_NAME/releases)
release_id=$(ruby -rjson -e "j = JSON.parse('$res'); puts j[0]['id']")
export RAILS_CACHE_ID=$release_id
Trong ứng dụng đường ray, ENV [ 'RAILS_CACHE_ID'] bây giờ sẽ được thiết lập để id phát hành gần đây nhất. Bạn cũng có thể sử dụng cùng một chiến lược này trong trình khởi tạo đường ray.
Nguồn
2014-12-22 18:48:54
Sau khi bật dyno-metadata, tôi đã thêm dòng này vào 'config/application.rb':' ENV ['RAILS_CACHE_ID'] = ENV ['HEROKU_RELEASE_VERSION'] 'vì vậy khi ứng dụng khởi động nó đặt ID bộ nhớ cache cho bản phát hành Heroku phiên bản. Điều này cũng có nghĩa là nó sẽ sử dụng một ID Cache mới khi thay đổi các biến env, nhưng điều đó không nhất thiết là một điều xấu. – Josh