我有一些微型网站,每个都有自己的样式表资产,在一个更大的Middleman项目中,如下所示:
project/
source/
microsite1.com/
stylesheets/
index.haml
microsite2.com/
stylesheets/
index.haml
stylesheets/
index.haml
config.rb
现在,在生产中,每个微型网站都是通过域根访问的,例如http://microsite1.com/
。但上面的目录结构是我的webhost管理这些微型网站所需要的,因此在开发过程中,最好在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">
with:relative_assets unset,yield
<link href="../stylesheets/screen.css" media="screen" rel="stylesheet" type="text/css">
设置它。前者的输出在生产情况下是正确的;后者在生产和发展方面都是正确的。
有没有办法配置Middleman以便我可以在http://localhost:4567/microsite1.com/
进行测试?或者,有什么方法可以模拟http://microsite1.com/
吗? (我想尝试修改/etc/hosts
,虽然这似乎不起作用,因为我没有指向IP地址)
答案 0 :(得分: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" />
答案 1 :(得分:0)
这是我的hacky但实际上非常实用的解决方案:
# 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; dr我正在挂钩asset_path
以确保所有相关资产(样式表,javascripts,图像)都带有一些$asset_base
路径前缀(如果已指定)。 (如果有人在Ruby + Middleman比我更好,想要建议我如何在没有全局变量的情况下做到这一点,我会全力以赴。)