🐰

【Ruby on Rails】good_job のダッシュボードを API モードで使う

に公開

Rails で API を開発しています。
非同期処理のために、good_job を導入したのですが、good_job の特徴の一つであるダッシュボードを利用するためには、API モードでは設定が必要だったので、備忘録を残します。

routes.rb で route を設定

ここは、API モードとかは関係ない普遍的な設定です。
ダッシュボードにアクセスするための route を設定します。

# app/config/routes.rb

Rails.application.routes.draw do
    namespace :admin do
        require 'good_job/engine'
        mount GoodJob::Engine => 'good_job'
    end
end 

application.rb に設定を追加する

API モードに足りない設定を追加します。

# config/application.rb

module AppName
    class Application < Rails::Application
        # Initialize configuration defaults for originally generated Rails version.
        config.load_defaults 7.1

        # ~~~~~~~~~(中略)~~~~~~~~~

        # 以下を追加
        config.middleware.use Rack::MethodOverride
        config.middleware.use ActionDispatch::Flash
        config.middleware.use ActionDispatch::Cookies
        config.middleware.use ActionDispatch::Session::CookieStore
    end
end

ここまで設定すれば、API モードでもダッシュボードにはアクセスできるようになるはずです。

(おまけ) ダッシュボードにベーシック認証を追加する

job には、機密情報が含まれることが多いため、good_job 公式でも認証機構を追加することを推奨しています。
devise などを用いてもいいのですが、今回は簡易的にベーシック認証を追加します。

# config/initializers/good_job.rb

Rails.application.configure do
  GoodJob::Engine.middleware.use(Rack::Auth::Basic) do |username, password|
    ActiveSupport::SecurityUtils.secure_compare(
      Rails.application.credentials.good_job[:username], username
    ) &&
    ActiveSupport::SecurityUtils.secure_compare(
      Rails.application.credentials.good_job[:password], password
    )
  end
end

credentials.yml.enc に username, password を設定する

credential を編集します。

    EDITOR="vi" bin/rails credentials:edit

下記のような構成でユーザー名とパスワードを設定しています。

good_job:
    username: foo
    password: barbaz

このように設定することで、
Rails 上で、Rails.application.credentials.good_job[:username] のような形でアクセスすることができます。

参考

https://github.com/bensheldon/good_job?tab=readme-ov-file#api-only-rails-applications
https://qiita.com/NaokiIshimura/items/2a179f2ab910992c4d39

GitHubで編集を提案

Discussion