NOTE / Ruby-On-Rails

使用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
這樣就可以執行本地的種子檔了

REFERENCE / 2

Loading