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/eager_load_knock.rb
require "knock/version"
require "knock/authenticable"
を追記
さっそく試してみると動作しました!