无法将单独的控制器模型文件加载到模块化的sinatra应用程序中

时间:2014-04-06 09:55:20

标签: ruby scope sinatra

目前,我使用来自sinatra-boilerplate的相同方法窃取,效果很好。但它的经典风格,我想改变它的模块化风格。所以我试图应用相同的需求技术:

class MyApp < Sinatra::Base    
    Dir["./App/Controllers/*.rb", "./App/Models/*.rb", "./App/Helpers/*.rb"].each {|file| require file}                                                                                       
end 

我的文件结构截图 enter image description here

在我运行backup并尝试访问任何控制器路由后,我得到了一个404页面,它将所有控制器加载到main scope,而不是MyApp的类定义}。

我应该使用类似的东西:

class MyApp < Sinatra::Base
   load("magic_file.rb", false, binding)
end

2 个答案:

答案 0 :(得分:1)

在模块化风格中,您仍然必须使用&#34;你的控制器类。类似的东西:

require 'sinatra'
Dir["./App/Controllers/*.rb", "./App/Models/*.rb", "./App/Helpers/*.rb"].each {|file| require file} 

class MyApp < Sinatra::Base    
    use MyController1
    use MyController2                                                                                 
end 

答案 1 :(得分:0)

无论您require还是load文件或它们被调用的命名空间都无关紧要,重要的是文件中的。最简单的方法是打开文件并为其添加命名空间。就个人而言,我已经预先包装了APP_NAME而不是我想要的名字,然后我运行一个查找并替换项目以重命名它。我不知道你是怎么做元风格的。