由于我无法控制的情况,我的生产露营网站出现在mysite.example.com/mysite
. 我很确定这是一个常见的 Apache/Passenger 配置问题,我现在对如何修复它不感兴趣,因为服务器超出了我的控制范围。可以说,“/”的控制器指向那里,我不能很快改变它。
现在,很长一段时间以来,这都不是问题,因为R(MyIndexController)
指向正确的位置。Rack::Static
但是,我通过调用使 $SITE_ROOT/public 可访问来提供我网站的 CSS 。这意味着样式表位于mysite.example.com/mysite/css/style.css
. 这就是问题所在:URL()
在我的布局中调用 Camping 方法时,给出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)。这些是在我们的 config.ru、viarun Rack::URLMap.new(Hash['/rest' => RestModule, '/ui' => PrettyInterfaceModule, '/management' => UserManagerModule]
等中设置的。
因此,在回答下面的评论时,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 抽象)来定位此资源。