2

由于我无法控制的情况,我的生产露营网站出现在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 抽象)来定位此资源。

4

2 回答 2

1

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

URL().merge('../css/style.css')
于 2010-09-22T07:10:22.287 回答
0

这是一个老问题,所以我假设您确实已经找到了解决方法,但是新乘客 + apache(或 ngnix)在我可以复制的情况下正确地露营。您的应用程序将位于 Documents 根目录中,并且所有包含在 /public 文件夹中,因此无论您是否使用子文件夹 /mysite 都应该正确路由 /public/css ,因为乘客不会(再次)产生影响我可以复制。因此,这应该可以通过乘客 3 + Apache 或 ngnix 轻松解决。

于 2012-04-13T15:31:42.583 回答