本來沒有打算要寫這個內容的,但是提到上傳圖片,好像不能不說一下雲端儲存,畢竟不能永遠在本地端欣賞自己的檔案、照片,總有一天還是會碰到上傳的問題。而且朋友強烈推薦 AWS S3 服務,所以就來說下這個服務吧。
這是 Amazon 提供雲端儲存服務,全名是 Simple Storage Service,簡稱為「S3」,可利用此服務來存放和保護任意數量的資料,例如網站、行動應用程式、備份和還原、存檔、企業應用程式、IoT 裝置及大數據分析。
要不要錢呢?
新的 AWS 客戶在第一年每月可以獲得 5 GB 的 Amazon S3 標準儲存、20,000 次 Get 請求、2,000 次 Put 請求、15 GB 的資料傳入、15 GB 的資料傳出。
打開google,搜尋 AWS,然後註冊吧!
因為前天有講到怎麼上傳圖片,而 CarrierWave 在 GitHub 的文件下方就有提到使用 S3 服務的說明,來動手做做看!
# Gemfile
gem 'fog-aws', '~> 3.6', '>= 3.6.7'
記得 bundle install
打開 config/intializers,在這個資料夾中新增一個檔名稱為 carrierwave.rb
把這段複製貼上到新建的檔案中
這邊先做初始化設定,必須提供你的 fog_credentials 和 fog_directory (也就是 bucket)
CarrierWave.configure do |config|
config.fog_credentials = {
provider: 'AWS', # required
aws_access_key_id: 'xxx', # required unless using use_iam_profile
aws_secret_access_key: 'yyy', # required unless using use_iam_profile
use_iam_profile: true, # optional, defaults to false
region: 'eu-west-1', # optional, defaults to 'us-east-1'
host: 's3.example.com', # optional, defaults to nil
endpoint: 'https://s3.example.com:8080' # optional, defaults to nil
}
config.fog_directory = 'name_of_bucket' # required
config.fog_public = false # optional, defaults to true
config.fog_at
仔細一看,其中有好多項目要填,而且都是比較機密的資訊,總不能把這些 id、金鑰等以明碼的方式跟著程式碼一起推上 GitHub 吧?其實昨天講述的 figaro 都只是鋪梗,一切都是為了使用別人的服務,通常在引入他人的服務時,都會需要一些驗證方式,所以正適合使用隱藏金鑰的環境變數。
class AvatarUploader < CarrierWave::Uploader::Base
storage :fog # to AWS S3
end
有產生一格物件的 URL,可以知道 bucket 的名稱、地區
打開 config/application.yml 新增金鑰,你可以自己決定要放在哪個環境中(production、test、development)
AWS_ACCESS_KEY_ID: '存取金鑰 ID'
AWS_SECRET_ACCESS_KEY: '私密存取金鑰'
S3_BUCKET_NAME: '儲存庫名稱'
(一個不小心手殘按錯,把第一次截圖的金鑰給刪除了,再重新創建一筆,所以兩張截圖的金鑰才會是不同的! 如果你沒發現就算了 )
設定:
$ figaro heroku:set -e production
進到 heroku config 查詢是否設定成功
$ heroku config
heroku run rails c
ENV[“AWS_ACCESS_KEY_ID”] # 分別印出相應的亂數即為成功
ENV[“AWS_SECRET_ACCESS_KEY”]
ENV[“S3_BUCKET_NAME”]
參考資料:
GitHub-CarrierWave Using Amazon S3
rails 上傳圖片超簡單
使用 Carrierwave 與 Figaro套件,在Heroku 部署 Rails 專案結合 AWS S3 存放上傳圖片
學無止盡,每天都要進步一點點!