2013-02-15 23 views
0

我有一個Sinatra應用程序,我服務的鏈接資產從/assets。工作得不錯,但由於我是一個完美主義者,爲了儘可能保持整潔,我希望從各自的子目錄獲得資產。
I.e.我希望#{root}/app/assets/stylesheets/application.css.scss可以作爲/assets/stylesheets/application.css,而不僅僅是現在的/assets/application.css服務資產從子目錄w /在Sinatra鏈輪

這可能嗎? Middleman做了類似的事情,但我不確定它實際上靠什麼樣的鏈輪。

回答

0

Middleman靜態網站發生器,因此資產預編譯,並擔任如果他們在一個public directory,這意味着你可以有stylesheets一個子目錄,它將成爲用於訪問的URL的一部分子目錄中的資產。

Sprockets編譯資產,因爲它們被訪問,然後對其進行緩存(據我可以看到),並且採用了Rack application從他們邏輯路徑服務資產。從鏈輪自述文件:

邏輯路徑是資產源文件相對於其包含目錄在加載路徑中的其 的路徑。例如,如果您的加載路徑 包含目錄app/assets/javascripts:

資產源文件|邏輯路徑
app/assets/javascripts/application.js | application.js
app/assets/javascripts/models/project.js | models/project.js

我沒有看到一個明顯的設置來改變文檔,除非你願意查看源代碼和黑客一點,那麼我會說答案是否定的。也許你可以嘗試縮短加載路徑並查看它是否包含子目錄?

+1

Middleman在開發模式下使用動態服務器(並建立在基於Sinatra的Padrino上),並利用Sprockets for includes等。所以我的想法是應該可以在vanilla Sinatra應用程序中模擬此行爲以及。 – 2013-02-16 11:47:51

+0

服務器是正交的,重要的是資產是預編譯還是編譯訪問頁面。 Middleman [做](https://github.com/middleman/middleman/blob/3.0-stable/middleman-core/middleman-core.gemspec)[不](https://github.com/middleman/middleman/blob /3.0-stable/middleman-more/middleman-more.gemspec)使用Sprockets,這裏有[另一個寶石](https://github.com/middleman/middleman-sprockets),它不會在訪問時編譯它預編譯。 – iain 2013-02-16 12:23:35

+0

[查看文檔](http://middlemanapp.com/asset-pipeline/),Sprockets由Rails資產管道提供,並不是Middleman的一部分,但是如果它在那裏,您可以使用它 - 其他圖書館。 – iain 2013-02-16 12:26:38