使用figaro管理機密資訊或密碼的gem以及fog(照片)gem且部署到heroku上面
figaro是一個管理機密資訊或密碼的gem 將用來當作heroku呼叫密碼
gem "figaro"
安裝完成請使用以下指令進行安裝
bundle install
figaro install
會自動生成 config/application.yml 文件並且自動添加到 .gitnore檔案裡面(請先查看)設定管理機密資訊
cp config/application.yml config/application.yml.example
假如有一組key不希望公開至github,我們先把資訊存在config/application.yml檔,再使用ENV存取
production:
AWS_ACCESS_KEY_ID: "Access key ID" # 你的 Access key ID
AWS_SECRET_ACCESS_KEY: "Secret access key" # 你的 Secret access key
AWS_REGION: "你的 S3 bucket 的 Region 位置" # 你的 S3 bucket 的 Region 位置
AWS_BUCKET_NAME: "bucket name" # 你设定的 bucket name
development:
AWS_ACCESS_KEY_ID: "Access key ID" # 你的 Access key ID
AWS_SECRET_ACCESS_KEY: "Secret access key" # 你的 Secret access key
AWS_REGION: "你的 S3 bucket 的 Region 位置" # 你的 S3 bucket 的 Region 位置
AWS_BUCKET_NAME: "bucket name" # 你设定的 bucket name
接下來安裝fog好讓圖片都可以上傳,Gemfile install gem 'fog'
fog。
新增 carrierwave.rb 設定權限使用,config/initializers/carrierwave.rb
。
編輯config/initializers/carrierwave.rb
CarrierWave.configure do |config|
if Rails.env.production?
#這行註解掉原因是因為上傳到heroku會發生NoMethodError: undefined method `fog_provider=' for CarrierWave::Uploader::Base:Class錯誤
#config.fog_provider = 'fog'
config.fog_credentials = {
provider: 'AWS',
aws_access_key_id: ENV["AWS_ACCESS_KEY_ID"],
aws_secret_access_key: ENV["AWS_SECRET_ACCESS_KEY"],
region: ENV["AWS_REGION"]
}
config.fog_directory = ENV["AWS_BUCKET_NAME"]
else
config.storage :file
end
end
ENV 環境變數
把密碼設置到環境變量裡,然後調用這些變量。這樣就能在隱藏密碼的同時,使用它們。
注意:carrierwave.rb
中只需要填寫AWS_ACCESS_KEY_ID
(不用填寫真實的密碼),figaro自己會進行調用。
在發佈到HEROKU
figaro heroku:set -e production
查循目前heroku環境設定
heroku:config
如果你有種子檔想要使用heroku建立相關DB內容資訊請使用下面指令
heroku run rake db:seed
這樣就可以執行本地的種子檔了