Camping的URL()没有按预期给我“站点根”?

时间:2010-09-20 22:08:57

标签: ruby rack stylesheet camping

由于我无法控制的情况,我的生产露营网站显示在mysite.example.com/mysite。我很确定这是一个常见的Apache / Passenger配置问题,我现在对如何修复它并不感兴趣,因为服务器不受我的控制。可以说,“/”的控制器指向那里,我不能很快改变它。

现在,很长一段时间,这不是问题,因为R(MyIndexController)指向了正确的位置。但是,我使用Rack::Static调用来提供我的网站的CSS,以使$ 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),但在生产服务器上我不知道如何修复它。

我的问题:是否有其他方法(可能直接来自Rack?)我应该打电话给他?我真的想避免硬编码,和/或有一个黑客来确定我是在本地(用于调试)还是在生产中,为每次渲染布局而运行。

ETA:好的,这变得更加陌生。显然我已经抽出了上面的一些实际细节,其中一部分我认为我“过度擦洗”了。 “顶级”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(索引)实际上返回/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 个答案:

答案 0 :(得分:1)

所以在这种情况下,URL()实际上会返回http://mysite.example.com/mysite/rest/? 这样的事情怎么样?

URL().merge('../css/style.css')

答案 1 :(得分:0)

这是一个老问题,所以我假设你已经找到了一个解决方法,但新的乘客+ apache(或ngnix)在我可以复制的过程中表现正常。你的应用程序将在Documents根目录和/ public文件夹中的所有包含所以/ public / css应该正确路由,无论你是否使用子文件夹/ mysite,因为乘客不会有任何影响(再次)因为我可以复制。因此,乘客3 + Apache或ngnix应该可以轻松解决这个问题。