🐰
【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]
のような形でアクセスすることができます。
参考
Discussion