目前,我使用来自sinatra-boilerplate的相同方法窃取,效果很好。但它的经典风格,我想改变它的模块化风格。所以我试图应用相同的需求技术:
class MyApp < Sinatra::Base
Dir["./App/Controllers/*.rb", "./App/Models/*.rb", "./App/Helpers/*.rb"].each {|file| require file}
end
我的文件结构截图
在我运行backup
并尝试访问任何控制器路由后,我得到了一个404页面,它将所有控制器加载到main scope
,而不是MyApp
的类定义}。
我应该使用类似的东西:
class MyApp < Sinatra::Base
load("magic_file.rb", false, binding)
end
答案 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
而不是我想要的名字,然后我运行一个查找并替换项目以重命名它。我不知道你是怎么做元风格的。