Как я могу получить доступ к константе, определенной в одном файле инициализатора, в другой файл инициализатора в rails? - PullRequest
1 голос
/ 22 мая 2019

Я определил файл YAML следующим образом throttling_request.yml

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 в конфигурации для установки в стойку.Поэтому я не хочу путать вызов этой константы в файле инициализатора атаки в стойку.

Пожалуйста, дайте мне знать, нужна ли мне какая-либо другая информация.

1 Ответ

2 голосов
/ 22 мая 2019

Предлагаемое решение

В вашем 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]
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...