维护Shopify Rails应用时遭遇allow_jwt_authentication=未定义方法错误
Shopify Rails应用构建报错:NoMethodError: undefined method `allow_jwt_authentication=' for ShopifyApp::Configuration
问题背景
维护基于Rails 6.0.6的Shopify应用,上次仅推送少量HTML样式,现在构建时资产预编译失败,抛出NoMethodError,提示ShopifyApp::Configuration不存在allow_jwt_authentication=方法。
完整错误日志
Running: rake assets:precompile rake aborted! NoMethodError: undefined method `allow_jwt_authentication=' for #<ShopifyApp::Configuration:0x000056547a09f2e8> /tmp/build_ea8d2768/config/initializers/shopify_app.rb:10:in `block in ' /tmp/build_ea8d2768/vendor/bundle/ruby/2.7.0/gems/shopify_app-21.2.0/lib/shopify_app/configuration.rb:139:in `configure' /tmp/build_ea8d2768/config/initializers/shopify_app.rb:1:in `' /tmp/build_ea8d2768/vendor/bundle/ruby/2.7.0/gems/activesupport-6.0.6/lib/active_support/dependencies.rb:318:in `load' /tmp/build_ea8d2768/vendor/bundle/ruby/2.7.0/gems/activesupport-6.0.6/lib/active_support/dependencies.rb:318:in `block in load' /tmp/build_ea8d2768/vendor/bundle/ruby/2.7.0/gems/activesupport-6.0.6/lib/active_support/dependencies.rb:291:in `load_dependency' /tmp/build_ea8d2768/vendor/bundle/ruby/2.7.0/gems/activesupport-6.0.6/lib/active_support/dependencies.rb:318:in `load' /tmp/build_ea8d2768/vendor/bundle/ruby/2.7.0/gems/railties-6.0.6/lib/rails/engine.rb:666:in `block in load_config_initializer' /tmp/build_ea8d2768/vendor/bundle/ruby/2.7.0/gems/activesupport-6.0.6/lib/active_support/notifications.rb:182:in `instrument' /tmp/build_ea8d2768/vendor/bundle/ruby/2.7.0/gems/railties-6.0.6/lib/rails/engine.rb:665:in `load_config_initializer' /tmp/build_ea8d2768/vendor/bundle/ruby/2.7.0/gems/railties-6.0.6/lib/rails/engine.rb:625:in `block (2 levels) in class:Engine' /tmp/build_ea8d2768/vendor/bundle/ruby/2.7.0/gems/railties-6.0.6/lib/rails/engine.rb:624:in `each' /tmp/build_ea8d2768/vendor/bundle/ruby/2.7.0/gems/railties-6.0.6/lib/rails/engine.rb:624:in `block in class:Engine' /tmp/build_ea8d2768/vendor/bundle/ruby/2.7.0/gems/railties-6.0.6/lib/rails/initializable.rb:32:in `instance_exec' /tmp/build_ea8d2768/vendor/bundle/ruby/2.7.0/gems/railties-6.0.6/lib/rails/initializable.rb:32:in `run' /tmp/build_ea8d2768/vendor/bundle/ruby/2.7.0/gems/railties-6.0.6/lib/rails/initializable.rb:61:in `block in run_initializers' /tmp/build_ea8d2768/vendor/bundle/ruby/2.7.0/gems/railties-6.0.6/lib/rails/initializable.rb:50:in `each' /tmp/build_ea8d2768/vendor/bundle/ruby/2.7.0/gems/railties-6.0.6/lib/rails/initializable.rb:50:in `tsort_each_child' /tmp/build_ea8d2768/vendor/bundle/ruby/2.7.0/gems/railties-6.0.6/lib/rails/initializable.rb:60:in `run_initializers' /tmp/build_ea8d2768/vendor/bundle/ruby/2.7.0/gems/railties-6.0.6/lib/rails/application.rb:363:in `initialize!' /tmp/build_ea8d2768/config/environment.rb:5:in `' /tmp/build_ea8d2768/vendor/bundle/ruby/2.7.0/gems/bootsnap-1.13.0/lib/bootsnap/load_path_cache/core_ext/kernel_require.rb:32:in `require' /tmp/build_ea8d2768/vendor/bundle/ruby/2.7.0/gems/bootsnap-1.13.0/lib/bootsnap/load_path_cache/core_ext/kernel_require.rb:32:in `require' /tmp/build_ea8d2768/vendor/bundle/ruby/2.7.0/gems/zeitwerk-2.6.6/lib/zeitwerk/kernel.rb:38:in `require' /tmp/build_ea8d2768/vendor/bundle/ruby/2.7.0/gems/activesupport-6.0.6/lib/active_support/dependencies.rb:324:in `block in require' /tmp/build_ea8d2768/vendor/bundle/ruby/2.7.0/gems/activesupport-6.0.6/lib/active_support/dependencies.rb:291:in `load_dependency' /tmp/build_ea8d2768/vendor/bundle/ruby/2.7.0/gems/activesupport-6.0.6/lib/active_support/dependencies.rb:324:in `require' /tmp/build_ea8d2768/vendor/bundle/ruby/2.7.0/gems/railties-6.0.6/lib/rails/application.rb:339:in `require_environment!' /tmp/build_ea8d2768/vendor/bundle/ruby/2.7.0/gems/railties-6.0.6/lib/rails/application.rb:523:in `block in run_tasks_blocks' /tmp/build_ea8d2768/vendor/bundle/ruby/2.7.0/gems/sprockets-rails-3.4.2/lib/sprockets/rails/task.rb:61:in `block (2 levels) in define' Tasks: TOP => environment (See full trace by running task with --trace) ! ! Precompiling assets failed. ! ! Push rejected, failed to compile Ruby app. ! Push failed
已尝试更新gem、禁用jwt_authentication,但错误仍存在。
解决办法
检查shopify_app版本的配置项
当前使用的shopify_app版本是21.2.0,该版本的ShopifyApp::Configuration类没有allow_jwt_authentication=方法。运行bundle show shopify_app找到gem本地路径,查看lib/shopify_app/configuration.rb文件,确认JWT相关的正确配置项名称(比如部分版本使用jwt_authentication_enabled=)。修正初始化配置
打开config/initializers/shopify_app.rb,找到第10行的config.allow_jwt_authentication = ...代码:- 如果当前版本有替代配置项,替换为正确的名称;
- 如果该配置项在当前版本已被移除,直接删除该行代码。
确认依赖一致性
- 运行
bundle install确保所有gem依赖正确安装,没有版本冲突; - 如果需要升级shopify_app,先确认新版本与Rails 6.0.6的兼容性,避免引入新问题。
- 运行
本地预编译测试
本地执行RAILS_ENV=production rake assets:precompile,验证修复效果,没问题后再推送代码。
内容的提问来源于stack exchange,提问作者Artur Bobinski
相关产品推荐
相关产品推荐

