freks blog

Rails 6でknock gemが動かない 続編

Rails 6でknock gemが動かない | freks blog の続編です

今回試したのは

Rails 6.0.2
knock 2.1.1

Rails 6 のautloader zeitwerkを利用して動くようになったのでメモ

$ vim config/application.rb

config.autoloader = :classic

としていた autoloader の設定を消してやります

nsarno/knock: Seamless JWT authentication for Rails API のREADME通り設定、エラーがでます

NoMethodError:
undefined method `render_error' for #<Api::V1::TodosController:0x0000558e6dc82818>
Did you mean?  rendered_format

knock gem内で、zeitwerkのルールに合わないところがあるのだと思われ
ApplicationControllerで定義したメソッドが呼べなくなっています

ApplicationController

class Api::V1::ApplicationController < ActionController::API
    include Knock::Authenticable

    def render_error(model)
    # 省略
    end
end

調べてみると..

Rails 6 zeitwerk autoload problem with gem · Issue #36381 · rails/rails を見つけました

$ vim config/initializers/eagerloadknock.rb

require "knock/version"
require "knock/authenticable"

を追記

さっそく試してみると動作しました!