2013-08-30 81 views
1

我有幾個微型網站,每一個都有自己的樣式表的資產,內較大的中間人的項目,像這樣:多種資產目錄

project/ 
    source/ 
    microsite1.com/ 
     stylesheets/ 
     index.haml 
    microsite2.com/ 
     stylesheets/ 
     index.haml 
    stylesheets/ 
    index.haml 
    config.rb 

現在,在生產中,每個微型通過域根訪問,例如http://microsite1.com/。但是上面的目錄結構是我的虛擬主機管理這些微型網站所需要的,因此在開發過程中,最好在http://localhost:4567/microsite1.com/處訪問它們。

但是,資產助手輸出的路徑不是相對的。例如,在microsite1.com/index.haml

= stylesheet_link_tag "screen" 

產生

<link href="/stylesheets/screen.css" media="screen" rel="stylesheet" type="text/css"> 

與:relative_assets未設置,和產率

<link href="../stylesheets/screen.css" media="screen" rel="stylesheet" type="text/css"> 

時將其設置。在生產情況下前者的輸出是正確的;後者在生產和發展中都是正確的。

有沒有辦法配置Middleman,以便我可以在http://localhost:4567/microsite1.com/進行測試?或者,有什麼方法可以模擬http://microsite1.com/? (我想嘗試修改/etc/hosts,儘管由於我沒有指向IP地址,所以似乎不起作用)

+1

'/ source/microsite1.com/microsite1.css.scss'正確轉換當調用'middleman build'的時候,爲我編寫'/ build/microsite1.com/stylesheets/microsite1.css'。如果您使用資產助手,那麼'css_dir'設置是非常重要的,或者我錯了嗎? –

+0

我似乎已經弄混了一些配置;我在某些地方使用「樣式表」,而在其他地方使用「樣式表」,這似乎是「中間人構建」的噱頭。我會相應地更新問題。 –

回答

0

這裏是我的哈克,但實際上是非常實用的解決方案:

# microsite1.com/index.haml 
- if development? then $asset_base = "/microsite1.com" end 

# config.rb 
configure :development do 
    helpers do 
    alias_method :original_asset_path, :asset_path 
    def asset_path(*args) 
     path = original_asset_path(*args) 
     if not path =~ ABSOLUTE_URL_PATTERN && defined? $asset_base 
     path = File.join($asset_base, path) 
     end 
     path 
    end 
    end 
end 

TL;博士,我掛鉤asset_path以保證所有相關資產(樣式表,JavaScript的,圖像)的前綴如果指定了一些$asset_base路徑。 (如果有人比我更擅長Ruby + Middleman,想要告訴我如何在沒有全局變量的情況下做到這一點,那麼我就全力以赴了。)

0

爲什麼您需要觸摸css_dir設置呢?您應該能夠使用stylesheet_link_tag幫手如下...

<%= stylesheet_link_tag "../microsite1.com/stylesheets/microsite1" %> 

...居住在source/microsite1.com您的模板中。這應該給你...

<link href="/stylesheets/../microsite1.com/stylesheets/microsite1.css" media="screen" rel="stylesheet" type="text/css" /> 
+0

這樣可以在測試時解決問題,但是當微型網站部署到他們的最終家園時(例如'http://microsite1.com'),則會再次打破這些問題;它也不是特別可擴展的。我已經更新了這個問題,使其更加精確,並且包含了我如何以更一般的方式解決問題 –