我定义了一个类似于这个throttling_request.yml
的YAML文件
logged_in_user:
watching_timespan: 60
allowed_requests: 60
blocking_timespan: 300
non_logged_in_user:
watching_timespan: 300
allowed_requests: 300
我在config/intializers/throttle_config.rb
中加载YML文件
config = YAML.load_file('config/throttling_request.yml').with_indifferent_access
THROTTLE_REQ_NON_LOGGED_IN = config[:non_logged_in_user]
THROTTLE_REQ_LOGGED_IN = config[:logged_in_user]
但是我想将这个常量THROTTLE_REQ_NON_LOGGED_IN
访问到另一个初始化程序文件config/initializers/rack_attack.rb
中。
configs = ::THROTTLE_REQ_NON_LOGGED_IN
# Throttle all requests by IP (20rpm)
#
# Key: "rack::attack:#{Time.now.to_i/:period}:req/ip:#{req.ip}"
throttle('req/ip', limit: configs[:allowed_requests], period: configs[:watching_timespan]) do |req|
req.ip unless req.path.start_with?('/assets')
end
对于常量::
,我不能使用或不带作用域解析操作符THROTTLE_REQ_NON_LOGGED_IN
来加载。我想在机架攻击配置中使用常量THROTTLE_REQ_LOGGED_IN
作为我的另一个类和THROTTLE_REQ_NON_LOGGED_IN
。因此,我不想混淆调用这个常数在机架攻击初始化文件。
如果需要我提供任何其他信息,请告诉我。
发布于 2019-05-22 01:40:31
建议的解决方案
在您的application.rb
中执行以下操作:
::THROTTLE_CONFIG = YAML.load_file('config/throttling_request.yml').with_indifferent_access
现在,在项目的任何地方,包括config/initializers/rack_attack.rb
,您都可以这样做:
THROTTLE_CONFIG[:non_logged_in_user]
https://stackoverflow.com/questions/56252317
复制