2013-08-30 83 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'),则会再次打破这些问题;它也不是特别可扩展的。我已经更新了这个问题,使其更加精确,并且包含了我如何以更一般的方式解决问题 –