iT邦幫忙

第 12 屆 iT 邦幫忙鐵人賽

DAY 26
0
自我挑戰組

Metaprogramming Ruby and Rails系列 第 26

Day 26 -- 3 Steps 部署Sidekiq 背景任務在 Heroku

實作之前準備:

第一步: 安裝 Redis 在 Heroku

登入 Heroku 後,在 dashboard 上點選 Resources 頁面,就會看到 Add-ons 的搜尋欄位。
https://ithelp.ithome.com.tw/upload/images/20201011/20120868DNtN543vWv.png
許多部落格的安裝教學會推薦安裝 Redis To Go,但如果你發現背景任務一直卡在 佇列 queue 不動,也許你的 sidekiq 跟 redis server 有版本不符的問題。
https://ithelp.ithome.com.tw/upload/images/20201011/20120868xdDx8Ea6U1.png
在終端機輸入 heroku logs -t 尋找是否有錯誤
https://ithelp.ithome.com.tw/upload/images/20201011/20120868x4Um7OlCAp.png
可以看出因為版本太舊, Redis To Go 不能用了。解決辦法是必須換成 Heroku Redis,因為 Heroku Redis 目前提供的預設版本是 Redis 5.0,符合目前 Sidekiq 的要求。
https://ithelp.ithome.com.tw/upload/images/20201011/20120868g4QKavxQ2O.png

第二步: 設定環境變數

從 gandi 取得 SMTP 以及帳號、密碼資訊之後,再修改 production.rb 的設定檔,便可以利用 gandi 的 SMTP 伺服器寄信。 當然帳號及密碼都是需要利用環境變數存放,可以試試 figaro 來設定你自己的環境變數。
https://ithelp.ithome.com.tw/upload/images/20201011/201208686kPrsvFSOw.png

  config.action_mailer.default_url_options = { host: 'http://localhost:3000' }
  config.action_mailer.delivery_method = :smtp
  config.action_mailer.smtp_settings = {
    address: ENV['smtp_address'],
    port: 587,
    domain: 'postmaster@chienhao.tw',
    user_name: ENV['smtp_username'],
    password: ENV['smtp_password'],
    authentication: 'plain',
    enable_starttls_auto: true
  }

在 dashboard 上點選 Settings 頁面,再點選 Reveal Config Vars 。接著我們需要把 SMTP address以及帳號、密碼資訊新增到 Heroku 如下圖。
https://ithelp.ithome.com.tw/upload/images/20201011/20120868ZvvL0lFYqr.png

第三步: 新增 Procfile

在 rails root 建立 Procfile 及輸入以下指令

# root
bundle exec sidekiq -q default -q mailers

“ Heroku apps include a Procfile that specifies the commands that are executed by the app on startup. You can use a Procfile to declare a variety of process types, including: ” 截自 Heroku Dev Center

完成以上三個步驟就大功告成了!

參考資料:

mperham/sidekiq
Rails background workers
用 Sidekiq 處理 Background Job
#366 Sidekiq


上一篇
Day 25 -- Rails 實作開發模式 Action Mailer 寄信功能 with Sidekiq
下一篇
Day 27 -- Rails 實作 Rails-i18n語言選項在Bootstrap4 導覽列
系列文
Metaprogramming Ruby and Rails33

尚未有邦友留言

立即登入留言