Ruby on rails 如何将一个初始值设定项文件中定义的常量访问到rails中的另一个初始值设定项文件中?
我已经定义了这样一个YAML文件Ruby on rails 如何将一个初始值设定项文件中定义的常量访问到rails中的另一个初始值设定项文件中?,ruby-on-rails,ruby-on-rails-3,Ruby On Rails,Ruby On Rails 3,我已经定义了这样一个YAML文件throttling\u request.yml 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\u config.rb config
throttling\u request.yml
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\u 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]
但是我想访问另一个初始化程序文件config/initializers/rack\u 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
我无法在有或没有范围解析运算符的情况下加载常量的限制请求\u未登录\u的:
。我想对我的另一个类使用常量THROTTLE\u REQ\u LOGGED\u
,在机架攻击配置中使用常量THROTTLE\u REQ\u NON\u LOGGED\u
。所以我不想混淆在rack attack初始值设定项文件中调用这个常量
如果需要我提供任何其他信息,请告诉我。建议的解决方案
在应用程序.rb中执行以下操作:
::THROTTLE_CONFIG = YAML.load_file('config/throttling_request.yml').with_indifferent_access
现在,在项目中的任何地方,包括config/initializers/rack\u attack.rb
都可以执行以下操作:
THROTTLE_CONFIG[:non_logged_in_user]
这对
方法的config\u有帮助吗@Eyeslandicconfig\u for
很好,但我使用的是rails 3应用程序。它只提供rails 4.2 plus版本。Ok。如果你愿意的话,没有什么可以阻止你使用这个代码。我不确定在应用程序中加一个常量是否也是rails的标准。rb
@punitcs因为我已经用了3~4年了;从来都没有问题。