2010-09-20 44 views
2

由於我無法控制的情況,我的生產露營地出現在mysite.example.com/mysite。我很確定這是一個常見的Apache/Passenger配置問題,我對如何解決它現在不感興趣,因爲服務器不在我的控制之下。可以說,「/」的控制器指向那裏,我不能馬上改變這一點。野營的URL()不會按預期給我「網站根」嗎?

現在,很長一段時間,這不是一個問題,因爲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子目錄,因爲它缺少中間的「跳躍」。當我在本地運行機架時,一切正常(因爲此文件位於localhost:8080/css/style.css),但在生產服務器上我不知道如何解決此問題。

我的問題:是否有另一種方法(可能直接從Rack?),我應該調用?我真的想要避免對其進行硬編碼,並且/或者通過黑客來確定我是在本地運行(用於調試)還是在生產環境中運行,用於佈局的每個渲染。 ETA:OK,這會變得陌生。很顯然,我已經將上面的一些實際細節抽象出來了,其中一部分我認爲我「過度清理」了。 「頂級」URL實際上更類似於/mysite/rest(我們的RESTful界面的以開發人員爲中心的HTML演示文稿),而不是/mysite/management(帳戶)或/mysite/ui(JQuery的「好」UI)。這些設置在我們的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方法(而不是露營抽象)來定位此資源。

+0

R(MyController)返回什麼? /我的網站/? – 2010-09-21 08:07:26

回答

1

那麼在這種情況下,URL()實際上會返回http://mysite.example.com/mysite/rest/? 這樣的事情呢?

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

我得到了一些轉身 - URL()返回*僅* URL的基礎部分,正如我上面所說的'http:// mysite.example.com'。但是,R(Index)返回'http:// mysite.example.com/mysite/rest /'。所以我*可以*嘗試'R(Index).merge('../ css/style.css')',但是這感覺有點不好意思。 – Coderer 2010-09-24 22:19:27

+0

oops,R(Index)實際返回相對路徑,所以它是'/ mysite/rest'。這意味着我需要使用URL(Index).merge('../ css/style.css')',但這個想法成立 – Coderer 2010-09-24 22:27:11

0

這是一個老問題,所以我認爲你是已經找到一種解決方法,但新的客運+阿帕奇(或ngnix)能夠正常運行的,據我可以複製露營。您的應用程序將位於Documents根目錄以及/ public文件夾中的所有包含內容,因此/ public/css應正確路由,無論您使用的是子文件夾/ mysite還是不是,因爲乘客不會影響到(至少)因爲我可以複製。因此,這應該可以通過乘客3 + Apache或ngnix輕鬆解決。