【问题标题】:Serving assets from subdirectory w/ Sprockets in Sinatra在 Sinatra 中使用 Sprockets 从子目录提供资产
【发布时间】:2013-02-16 06:23:26
【问题描述】:

我有一个 Sinatra 应用程序,我在其中提供来自 /assets 的 Sprockets 资产。工作得很好,但由于我有点完美主义者,为了尽可能保持整洁,我希望从它们各自的子目录中提供资产。
IE。我希望将#{root}/app/assets/stylesheets/application.css.scss 用作/assets/stylesheets/application.css,而不是现在的/assets/application.css

这可能吗? Middleman 做了类似的事情,但我不确定它实际上在多大程度上依赖 Sprockets。

【问题讨论】:

    标签: sinatra sprockets


    【解决方案1】:

    Middleman 是一个静态 站点生成器,因此资产被预编译并提供,就好像它们在public directory 中一样,这意味着您可以拥有stylesheets 的子目录和它将成为用于访问子目录中资产的 url 的一部分。

    Sprockets 在访问资产时编译它们,然后缓存它们(据我所知),并使用Rack application 从它们的逻辑路径 提供资产。来自 Sprockets 自述文件:

    逻辑路径是资源源文件相对于它的路径 包含加载路径中的目录。例如,如果您的加载路径 包含目录 app/assets/javascripts:

    资产源文件 |逻辑路径
    应用程序/资产/javascripts/application.js |应用程序.js
    应用程序/资产/javascripts/models/project.js |模型/project.js

    我没有在文档中看到明显的更改设置,除非您愿意查看源代码并稍微修改一下,否则我会说答案是否定的。也许您可以尝试缩短加载路径并查看它是否包含子目录?

    【讨论】:

    • Middleman 在开发模式下使用动态服务器(并且构建在基于 Sinatra 的 Padrino 上),并利用 Sprockets 进行包含等。所以我的想法是应该可以模拟这种行为在香草 Sinatra 应用中也是如此。
    • 服务器是正交的,重要的是资产是预编译还是在访问页面时编译。中间人doesnot 使用Sprockets,有another gem for this,它不会在访问时编译,它会预编译。
    • See the docs,Sprockets 是由 Rails 资产管道提供的,不是 Middleman 的一部分,但如果它在那里,你可以使用它 - 就像任何其他库一样.
    • 我明白了,谢谢你的解释。我想我的问题是:如何在我的 Sinatra 应用程序中利用类似 Sprockets 的 require 语句来处理 JavaScript,而不使用完整的资产管道?
    • @JohanSahlén 我不清楚你的意思,你是mean this 吗?就个人而言,我只是使用 Guard 在保存时预编译并将结果直接粘贴到子文件夹中的公共文件中,我认为不需要 Sprockets/资产管道带来的所有复杂性。再说一次,我不明白为什么需要大多数 Rails,这可能就是我更喜欢 Sinatra 的原因! :)
    猜你喜欢
    • 1970-01-01
    • 2017-03-28
    • 1970-01-01
    • 2018-05-10
    • 2013-03-06
    • 1970-01-01
    • 1970-01-01
    • 2016-07-08
    • 2011-11-25
    相关资源
    最近更新 更多