gpt4 book ai didi

ruby-on-rails - ActionController 回调过滤器链是否一致?

转载 作者:行者123 更新时间:2023-12-01 03:21:58 24 4
gpt4 key购买 nike

我有这个遗留的 Spree 应用程序,带有 2 个带有继承回调的装饰 Controller :

Spree::Api::BaseController.class_eval do

before_action :load_api_key_user, only: [:index, :show, :jstree]

before_action :override_params, only: [:create, :new]

before_action do
api_key_user = Spree.user_class.by_store(
current_store
).find_by(spree_api_key: api_key.to_s)
if api_key_user && (api_key_user.admin? || api_key_user.manager?)
load_api_key_user
end
end
before_action :load_user
before_action :authenticate_user
before_action :load_user_roles
...


Spree::Api::V1::OrdersController.class_eval do
# Allow non authenticated user to perform some actions..
before_action :load_api_key_user, only: [:create, :apply_coupon_code]
before_action :load_user
# only owners of the order are allowed to handle order.
before_action :authorize_for_order, except: [:create, :index, :apply_coupon_code]
before_action :authenticate_user
before_action :load_user_roles

过滤器顺序链与具有相同 ruby​​ 版本(ruby 2.2.1p85)和相同 gem 版本的不同机器不同,这会产生意外行为。我用这个命令检查订单:
Spree::Api::V1::OrdersController._process_action_callbacks.map{|c| "#{c.kind}:#{c.filter}"}

同样的配置,结果是不同的。

native : ["before:set_user_language", "before:set_version", "before:set_guest_token", "before:set_content_type", "before:set_xhr_redirected_to", "before:set_request_method_cookie", "after:abort_xdomain_redirect", "before:override_params", "before:70133939841780", "before:search_ransack_by_store", "before:search_ransack_by_region", "before:find_order", "before:load_api_key_user", "before:load_user", "before:authorize_for_order", "before:authenticate_user", "before:load_user_roles", "before:remove_email_from_params_if_nil", "before:70133903534220", "before:70133903532720", "before:70133931867720", "before:70133931866900"]
远程机器: ["before:set_user_language", "before:set_version", "before:set_guest_token", "before:set_content_type", "before:set_xhr_redirected_to", "before:set_request_method_cookie", "after:abort_xdomain_redirect", "before:find_order", "before:authorize_for_order", "before:remove_email_from_params_if_nil", "before:46966032393140", "before:46966032349400", "before:46966032346700", "before:46966032344600", "before:load_api_key_user", "before:override_params", "before:46966007219340", "before:load_user", "before:authenticate_user", "before:load_user_roles", "before:search_ransack_by_store", "before:search_ransack_by_region"]
所以我有相同的 ruby​​ 版本和相同的 gem set。还有什么可以解释这种变化?

最佳答案

功能集是相同的,它们的顺序是不同的你的意思是?

ActionController 回调过滤器链不一致。

我在开发MFC项目的时候遇到过这种事情。

当时,当我以 Debug模式运行时,没有错误,当以实模式运行时,出现 RUNTIME 错误,我修复了这个错误。

RUNTIME 错误是由函数命令引起的。

事件函数 OnCreate 和 OnResizeWindow 引起了我的注意。

debug mode: OnCreate() is called before OnResizeWindow()
real mode: OnCreate() is called after OnResizeWindow()

我以为是系统中断的原因。

然后关于你的项目:
在远程机器上,会比在本地机器上有更多的中断。

要修复您的错误,您必须在自己的代码上构建函数排序系统。

关于ruby-on-rails - ActionController 回调过滤器链是否一致?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44501110/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com