iT邦幫忙

2023 iThome 鐵人賽

DAY 25
0

什麼是 Gem?

在 Ruby on Rails 中,Gem 是一種打包好的程式碼,可以輕鬆地加到 Rails 應用程式中,以實現各種功能。 Gem 可以包含任何東西,從用於處理圖像的庫到處理資料庫操作的工具,也可以用來擴展或修改 Ruby 應用程式的功能,簡單來說就是由無私的開發者貢獻程式碼並且打包成好用的套件,讓開發更有效率!

傳送門

所有的 Gem 相關資訊都可以到RubyGems裡面找到!

安裝套件

安裝套件只要 gem install 指令加上套件的名字,敲完按下 Enter 鍵,就自動會從網路下載套件、安裝套件,一段指令即可完成,相當簡單

使用套件

至於怎麼使用套件,重點中的重點就是看文件,使用前可以先到套件的 GitHub上 看README.md的說明,基本上按照說明的步驟走就能略知一二,然後就要看怎麼應用到你的專案上

dotenv-rails 套件

那就用dotenv套件來介紹吧! 先簡單說明一下這個套件的用途!在開發web 應用程式時,經常需要儲存一些敏感資訊,例如 API 金鑰、資料庫密碼或其他機密設置等等,為了保護這些資訊,我們可以使用 dotenv-rails 這個 Ruby 套件,將它們隱藏在環境變數中,防止它們被不慎洩露!

安裝 dotenv-rails

在 Rails 的 Gemfile 中加入以下,這邊會放在開發環境是因為這個只有在開發環境才會用到

gem 'dotenv-rails', groups: [:development, :test]

專案的終端幾執行 bundle 指令

$ bundle install

建立一個.env文件

dotenv-rails 使用一個名為.env的檔案來儲存環境變數

$ touch .env

.env 裡面大概會長得像這樣:

# Google
GOOGLE_CLIENT_ID = your_google_client_id
GOOGLE_CLIENT_SECRET = your_google_client_secret

# Mailgun
MAIL_PORT = your_mail_port
MAIL_USER_NAME = your_mail_user
MAIL_PASSWORD = your_mail_password

# AWS S3
AWS_ACCESS_KEY_ID = access_key_id
AWS_SECRET_ACCESS_KEY = secret_access_key

請將.env檔案加入到.gitignore檔案裡 很重要!!!要避免進入版控,一但進去版控等於把金鑰拱手讓人!

註: .gitignore檔案就跟字面上一樣 git ignore 所以裡面的東西都會被忽視所以不會進入版控裡

使用金鑰環境變數

以 Google 登入來說會長得像下方這樣:

config.omniauth :google_oauth2, ENV["GOOGLE_CLIENT_ID"], ENV["GOOGLE_CLIENT_SECRET"],{}

慣例?

先前的文章都有提到 Ruby on Rails 的優點之一就是 慣例優於設定,一般團隊專案開發會建立一個類似.env.sample這個檔案讓團隊成員知道有哪些金鑰,跟他們的環境變數名稱而.env檔案會放入真的的金鑰如下:

.env.sample

這邊會告知隊友們金鑰的擺放位置,只要複製貼上換上真正的金鑰即可

# Google
GOOGLE_CLIENT_ID = your_google_client_id
GOOGLE_CLIENT_SECRET = your_google_client_secret

.env

真正的金鑰會類似下方這樣很長一串亂碼,這邊當然是我亂打的來當示範: )

# Google
GOOGLE_CLIENT_ID = 50aq88uv83812aauuuuuu2499929933393bbcid 
GOOGLE_CLIENT_SECRET = uv83813240340234230420342aa1139slewf

結論

使用 Gem 套件,就是要讓開發更有效率

可以簡單收集一些實用的套件讓你的專案開發一氣呵成,減少不必要的時間,增加開發的效率!

預告

明天預計來介紹 API ,我們明天見!


上一篇
Day 24 - Rails N + 1 問題
下一篇
Day 26 - API 應用程式介面
系列文
Zero to Ruby on Rails30
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言