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">

与它设置。前一个输出在生产案例中是正确的;后者在生产和开发中都不正确。

有没有办法配置中间人以便我可以测试http://localhost:4567/microsite1.com/?或者,有什么方法可以模拟http://microsite1.com/吗?(我想尝试修改/etc/hosts,虽然这似乎不起作用,因为我没有指向 IP 地址)

4

2 回答 2

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" />
于 2013-08-31T16:52:27.000 回答
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;博士我正在挂钩asset_path以保证所有相关资产(样式表、javascript、图像)$asset_base如果指定,则以某些路径为前缀。(如果比我更擅长 Ruby + Middleman 的人想建议我如何在没有全局变量的情况下做到这一点,我会全神贯注。)

于 2013-08-31T23:40:21.407 回答