本篇文章接續上一篇,使用 Carrierwave 套件,上傳檔案到 AWS S3
🏁 什麼是 AWS S3?
它是 Amazon 的雲端服務 Amazon Web Services (AWS);
而 S3 代表的是 Simple Storage Service,字面上就是簡單的儲存服務~
業界也聽到不少人使用 Google 的雲端服務 GCP (Google Cloud Platform)
這次專案會使用到 AWS S3,因此就不再詳述 GCP 囉。
除了裝過的 gem carrierwave 以外,要使用這個服務需要再另外加兩個 gem
1 | gem 'fog-aws' # 支援上傳檔案到 AWS S3gem 'figaro' # 機密資訊傳遞套件,搭配 S3 |
安裝 gem 大法:**bundle install **
接下來讓我們先來看看 figaro 會做什麼事 👀
- 首先在終端機輸入
$ bundle exec figaro install
會自動生出一個檔案application.yml
我們將在裡面輸入 S3 的 aws_access_key_id / aws_secret_access_key
而這個 application.yml 也會被貼心的自動加入 .gitignore 裡面
避免把我們的機密資訊洩漏出去 🔒
2. 接下來我們會在單引號裡面輸入從 S3 獲得的專屬
aws_access_key_id & aws_secret_access_key,以及在S3 自創的 bucket 名
aws_access_key_id: ‘S3 的id’
aws_secret_access_key: ‘S3 的key’
fog_directory: ‘S3 的bucket名稱’
3. 在config/initializers/
路徑下,手動新增 carrierwave.rb
檔案
在裡面放入以下的程式碼
carrierwave 的 Read.me 提供上方的程式碼給我們,方便複製並修改
可以注意到上面有些是 required 必須寫上去,optional 不一定要寫
下面是我的版本 👀 (僅供參考)
比較不一樣的地方是,我還利用了 figaro 的ENV[]
環境變數
⚠️ 第六&七行要依據自己在 AWS S3 選擇的伺服器區域喔 ⚠️
我自己選擇的是東北亞 東京,因為我喜歡日本 🇯🇵🗼🗻(誤)
4. 我們回到 app/uploaders/cover_uploader.rb
來做一個簡單的修改
還記得上篇文章提到 storage :file 跟 storage :fog 的差別嗎?
如果要上傳到AWS S3,就要把 file 註解掉,把 fog 亮出來 ✨
這邊就完成了,484 很簡單 🥲
為了做出上傳的功能暈頭了3天@@
最後附上成果照(可能看不太出來😅)
以上如果敘述不周全的部分還請多包涵 🙇🏻♂️
想了解更多可以參考下方強大的前輩們部落格文章~
參考來源 🙏
1. https://blog.gmifly.tw/2018/06/20/Rails-%E6%8E%9B%E8%BC%89-AWS-S3-%E5%9C%96%E5%BA%8A/
2. https://gregning.github.io/ruby-on-rails/2018/01/30/5408775/
3. https://ithelp.ithome.com.tw/articles/10199103
4. https://medium.com/@eggyy1224/%E5%88%A9%E7%94%A8carrierwave%E4%BB%A5%E5%8F%8Aamazon-s3%E8%99%95%E7%90%86rails-%E6%87%89%E7%94%A8%E7%9A%84%E5%9C%96%E7%89%87%E4%B8%8A%E5%82%B3-6ba0027878ad
5. https://www.stevenchang.tw/blog/2019/07/16/CarrierWave_and_AWS_S3