为什么在Sinatra助手里面没有require_all工作?

时间:2018-06-06 14:04:19

标签: ruby sinatra

所以我在Sinatra辅助模块中有一个函数Data,它在reload_config下面定义。

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的内容,但在我的帮助模块中却没有。{/ p>

redis.rb包含redis.rb的分配(应该可以从任何范围级别访问吗?)

另一个令人不安的事实:如果我改变了我给configatron.redis的路径,它会引发异常。

另外,如果我在require_all内写puts "Haaaaa!",则会在redis.rb加载时执行,但从config.ru加载时不执行。

这可能是什么原因?如果它与词法作用域有关,那为什么不能实际执行诸如helpers.rbputs之类的语句?

请注意,configatron.foo = 'hello'require_all已加载到configatron

1 个答案:

答案 0 :(得分:0)

解决方案仅限于用户load_all而非require_all

代码不会因为某些词法范围问题而加载,但因为require_all不加载两次相同的文件。因此,使用load_all解决了问题。