どのpull reqのアプリかどうかを判定する方法
app.json
{
"env": {
"HEROKU_APP_NAME": {
"required": true
}
}
}
app.jsonでHEROKU_APP_NAMEを設定しておくと、HEROKU_APP_NAMEにアプリ名-pr-pull reqの番号
で値が入るので判定できる。
Amazon S3を使う
Review Appの場合pull reqごとに別環境前提になるので同じS3のバケットでディレクトリを別にするか、アプリごとにS3のバケットを作成後する。
同じS3のバケットを使う方法
アプリ毎に別のディレクトリにアップロードできるようにする。
CarrierWaveの例
class ApplicationUploader < CarrierWave::Uploader::Base
def store_dir
if ENV['HEROKU_APP_NAME'].present?
"#{ENV['HEROKU_APP_NAME']}/uploads/#{model.class.to_s.underscore}/#{mounted_as}/#{model.id}"
else
"uploads/#{model.class.to_s.underscore}/#{mounted_as}/#{model.id}"
end
end
end
S3バケットを作成する方法
aws-sdk-rubyを使いS3バケットを作成、削除するようにすれば良い。
- pr-predestroy scriptでそのpull req用のS3のバケットを作成してバケットを環境変数にセットする
- pr-predestroy のときにpull req用のS3バケットを削除する
MySQLを使う
Clear DBは環境変数がDATABASE_URLで入ってこないため工夫が必要になる。
ビルド時にHerokuのAPIを使ってDATABSE_URLにセットする方法
database.ymlを修正する方法
database.yml
production:
url: <%= ENV.fetch('CLEARDB_DATABASE_URL', '').sub('mysql://', 'mysql2://') %>