由于我无法控制的情况,我的生产营地出现在
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方法(而不是野营抽象)来定位此资源。