[Rails] 掛載 AWS S3 圖床

會建議先做好,密鑰安全的功能:
figaro 安裝指南 參考這篇:[Rails] 如何安裝 figaro?

以下會以純文字記錄步驟過程

步驟一,註冊帳號,需要綁定信用卡(完成請跳過)

註冊 AWS 的帳號(需要Visa或MasterCard)

步驟二,根據AWS安全審查指南,創見IAM用戶

登入後左下角有 lanuage 可以轉換簡體 or 繁體

每行都是一个换页

點選右上/帳戶名稱 / 下拉選單 / 我的安全憑證

點選左邊側欄 / 用戶 / 添加用戶 / 下一步(會導到添加用戶第一步驟)

輸入 / 用戶名 / 選擇訪問類型,勾選編程訪問 / 下一步(會導到第二步驟)

設定權限 / 直接附加我現有策略 / 篩選條件輸入(s3) / 勾選 AmazonS3FullAccess(大概是中間那行)/ 下一步

審核 / 下一步(會是完成頁面)

點擊下載.csv檔案,裡面有兩個key 分別是 access key IDsecret access key等等會用到

步驟三,S3 創見存儲桶 Bucket

點擊左上角服務 / 點擊 S3

點擊創建儲存桶

輸入儲存桶名稱,選擇區域(Tokyo) / 創建

步驟四,安裝Gem

Gemfile
1
gem 'fog'

安裝指令 bundle install

步驟五,修改上傳處

修改原本上傳路徑 app/uploader/image_uploader.rb
vim app/uploader/image_uploader.rb

image_uploader.rb
1
2
3
4
5
6
class ImageUploader < CarrierWave::Uploader::Base
...(略)
- storage :file
+ # storage :file
+ storage :fog
...(略)

步驟六,新增 carrierwave 進入 AWS 的設定檔

touch config/initializers/carrierwave.rb

config/initializers/carrierwave.rb
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
CarrierWave.configure do |config|
if Rails.env.production?
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

步驟七,把上一步驟需要的密鑰放到 figaro 管理

figaro安裝指南 參考這篇:[Rails] 如何安裝 figaro?

編輯此檔案:

config/application.yml
1
2
3
4
5
6
7
8
9
10
production:
AWS_ACCESS_KEY_ID: "xxxx" # 你的 Access key ID
AWS_SECRET_ACCESS_KEY: "xxxx" # 你的 Secret access key
AWS_REGION: "xxxx" # 你的 S3 bucket 的 Region 位置
AWS_BUCKET_NAME: "xxxx" # 你设定的 bucket name
development:
AWS_ACCESS_KEY_ID: "xxxx" # 你的 Access key ID
AWS_SECRET_ACCESS_KEY: "xxxx" # 你的 Secret access key
AWS_REGION: "xxxx" # 你的 S3 bucket 的 Region 位置
AWS_BUCKET_NAME: "xxxx" # 你设定的 bucket name

查找AWS_REGION: Amazon S3 - Buckets and Regions
像是 Tokyo 就是 ap-northeast-1

記得 figaro 一鍵推送密鑰上 heroku
figaro heroku:set -e production
就完成了!

如果heroku 已經有檔案,如何清空 heroku 上的 db?
參考這篇:[Rails] learn rack db:migrate

Comments

Your browser is out-of-date!

Update your browser to view this website correctly. Update my browser now

×