我已经定义了一个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
我将YML文件加载到config/intializers/throttle_config.rb
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
用于机架攻击配置。因此,我不想在机架攻击初始化程序文件中混淆调用此常量。
请让我知道是否需要我提供其他信息。
答案 0 :(得分:1)
建议的解决方案
在您的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]