如何在已安装的sinatra应用程序的CSS文件中编写可移植图像路径?

时间:2015-06-11 21:34:33

标签: sinatra rack

背景

您正在编写一个sinatra(或机架)应用程序,并希望能够使用它,无需更改代码,无论是作为独立应用程序还是作为已安装的应用程序。

也就是说,您可以单独运行此应用程序,或者您可以将其作为子应用程序安装在其他应用程序中,方法是在“config.ru”中执行以下操作:

run Rack::URLMap.new("/" => MainApp.new, 
                     "/my_mounted_app" => MountedApp.new)

一切似乎进展顺利,因为您在所有视图中都谨慎使用sinatra's url() helper,确保无论您的应用是如何安装的,都会生成正确的路径。

问题

但是现在你想在CSS文件中包含一个图像作为背景,你就陷入了两难境地:

  1. 在CSS文件中使用url()辅助方法。这可以确保您的图像路径正确且可移植,但现在您的CSS文件必须在每次请求时由sinatra处理。
  2. 使用构建过程(可能涉及SASS和一些具有应用程序安装路径的全局配置文件)来生成具有正确图像路径的CSS文件。这也确保了正确的路径,但引入了构建过程的复杂性。
  3. 还有第三种更好的选择吗?使用URLMap安装应用程序的真正问题是 - 是否有另一种实现安装的方法可以避免这些问题?

    同样,目标是:

    1. 一款完全便携的应用程序,无需任何更改即可安装。
    2. 不需要由sinatra处理的静态资产。
    3. 没有静态资产构建过程。

1 个答案:

答案 0 :(得分:1)

您可以在CSS中使用相对网址。

由于CSS和图像都位于public目录下,因此它们之间的相对路径将与整个应用程序的安装位置相同。