代码之家  ›  专栏  ›  技术社区  ›  Coderer

camping的url()没有按预期给我“site root”?

  •  2
  • Coderer  · 技术社区  · 15 年前

    由于我无法控制的情况,我的生产营地出现在 mysite.example.com/mysite . 我非常肯定这是一个常见的Apache/Passenger配置问题,我对如何立即修复它不感兴趣,因为服务器超出了我的控制范围。可以这么说,“/”的控制器指向那里,我不能很快改变它。

    很长一段时间,这不是问题,因为 R(MyIndexController) 指向正确的位置。但是,我使用 Rack::Static 调用以使$site_root/public可访问。这意味着样式表位于 mysite.example.com/mysite/css/style.css . 问题出在这里:野营 URL() 方法在布局中调用时,给出 http://mysite.example.com 不是 http://mysite.example.com/mysite . 所以我不能把它指向/CSS子目录,因为中间缺少一个“跳”。当我在本地运行rackup时,一切正常(因为此文件位于 localhost:8080/css/style.css 但是在生产服务器上,我不知道如何修复它。

    我的问题是:是否有其他方法(可能直接从机架上?)我应该打电话给你?我真的想避免硬编码,和/或让黑客来确定我是在本地运行(用于调试),还是在生产中运行,用于每次呈现布局。

    埃塔:好吧,这很奇怪。显然,我已经抽象出了上面的一些实际细节,其中一部分我认为我“过度洗刷”。“顶级”URL实际上更类似于 /mysite/rest (我们的RESTful接口以开发人员为中心的HTML表示),而不是 /mysite/management (账户)或 /mysite/ui (jquery'd/“不错”的用户界面)。这些是在我们的config.ru中设置的,通过 run Rack::URLMap.new(Hash['/rest' => RestModule, '/ui' => PrettyInterfaceModule, '/management' => UserManagerModule] 等。

    因此,对于下面的注释,从restmodule中的视图返回r(index) /mysite/rest/ . 例如,我在布局中有一个“主页”链接,它看起来像 a :href=>R(Index) 并生成类似于 <a href="/mysite/rest/"> . 服务器被配置为直接在“站点根目录”上提供来自./public的文件,因此 ./public/css/style.css 实际上是在 http://mysite.example.com/mysite/css/style.css 如前所述。它是 那个 我在自动生成链接时遇到问题,这是因为Rack::UrlMap,我认为我可能需要依赖本地Rack方法(而不是野营抽象)来定位此资源。

    2 回复  |  直到 13 年前
        1
  •  1
  •   Magnus Holm    15 年前

    所以在这种情况下, URL() 实际回报 http://mysite.example.com/mysite/rest/ ? 像这样的东西怎么样?

    URL().merge('../css/style.css')
    
        2
  •  0
  •   devnull    13 年前

    这是一个古老的问题,所以我假设你已经找到了解决办法,但是新的乘客+阿帕奇(或NGNIX)在我可以复制的范围内,对于野营来说行为是正确的。您的应用程序将位于documents根目录下,/public文件夹中的所有includes都应正确路由/public/css,无论您是否使用子文件夹/mysite,在我可以复制的范围内,作为乘客不会产生任何影响(再次)。因此,对于乘客3+Apache或Ngnix,这应该很容易解决。