【发布时间】:2010-09-20 22:08:57
【问题描述】:
由于我无法控制的情况,我的生产露营网站出现在mysite.example.com/mysite。我很确定这是一个常见的 Apache/Passenger 配置问题,我现在对如何修复它不感兴趣,因为服务器超出了我的控制范围。可以说,“/”的控制器指向那里,我不能很快改变它。
现在,很长一段时间以来,这都不是问题,因为R(MyIndexController) 指向了正确的位置。但是,我使用 Rack::Static 调用为我的站点的 CSS 提供服务,以使 $SITE_ROOT/public 可访问。这意味着样式表位于mysite.example.com/mysite/css/style.css。这就是问题所在:Camping 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 / “nice” UI) .这些是通过run Rack::URLMap.new(Hash['/rest' => RestModule, '/ui' => PrettyInterfaceModule, '/management' => UserManagerModule] 等在我们的config.ru 中设置的。
因此,对于下面的评论,R(Index) 从 RestModule 中的视图来看,实际上返回 /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 方法(而不是 Camping 抽象)来定位它资源。
【问题讨论】:
-
R(MyController) 返回什么? /mysite/?
标签: ruby rack stylesheet camping