Почему require_all не работает внутри помощника Синатры? - PullRequest
0 голосов
/ 06 июня 2018

Итак, у меня есть функция reload_config внутри вспомогательного модуля Sinatra, которая определена ниже в helpers.rb.

module Web
  module Helpers
    def reload_config
      require_all 'config/*.rb'
    end
  end
end

Затем она загружается в Web::Base рекомендуемым способом, используя helpers Web::Helpers.

Внутри config есть файл с именем redis.rb, который затем загружается reload_config.По крайней мере, так и должно быть.Вызов require_all внутри моего config.ru (верхнего уровня) эффективно загружает содержимое redis.rb, но внутри моего вспомогательного модуля - нет.

redis.rb содержит назначения для configatron.redis (что должнобыть доступным с любого уровня контекста, верно?)

Еще один тревожный факт: если я изменю путь, который я задаю для require_all, это вызовет исключение.

Также, если я напишу, например,puts "Haaaaa!" внутри redis.rb, он выполняется при загрузке с config.ru, но не при загрузке с helpers.rb.

Что может быть причиной этого?Если это связано с лексическим ограничением, то почему на самом деле невозможно выполнить такие операторы, как puts или configatron.foo = 'hello'?

Обратите внимание, что require_all и configatron загружаются в config.ru.

1 Ответ

0 голосов
/ 06 июня 2018

Решение просто для пользователя load_all вместо require_all.

Код не загружается не из-за некоторой проблемы с лексическим ограничением, а из-за этого require_all не загружает дважды один и тот же файл,Поэтому использование load_all решает проблему.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...