【问题标题】:Can't load separate controller model file into modular sinatra app无法将单独的控制器模型文件加载到模块化 sinatra 应用程序中
【发布时间】:2014-05-18 10:28:17
【问题描述】:

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

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

【问题讨论】:

    标签: ruby scope sinatra


    【解决方案1】:

    在模块化风格中,您仍然必须“使用”您的控制器类。比如:

    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 
    

    【讨论】:

      【解决方案2】:

      无论您是require 还是load 文件还是调用它们的命名空间都无关紧要,重要的是文件in 是什么。最简单的方法是打开文件并向它们添加名称空间。就个人而言,我已经预先包装好我的,但使用 APP_NAME 而不是我想要的名称,然后我在项目上运行查找和替换以重命名它。我不知道你会怎么做元风格。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2019-02-18
        • 2013-06-19
        • 1970-01-01
        • 2013-07-23
        • 1970-01-01
        • 2017-09-28
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多