2011-02-06 33 views
0

我正在嘗試使用nginx和Passenger部署Rails應用程序(具體而言)的不同方法。假設我已經安裝在/var/local/railapps/redmine-1.1中。將應用程序部署到主機根時,Nginx +乘客無法解析軟鏈接

當我部署爲子URI,我可以做軟鏈接只是爲了public文件夾:

sudo ln -s /var/local/railapps/redmine-1.1/public /var/www/rails/redmine 

,並加入到servernginx.conf

root /var/www/rails; 
passenger_enabled on; 
passenger_base_uri /redmine; 

有了這個,管理平臺可訪問與public相同級別的文件夾,例如,/var/local/railapps/redmine-1.1/config

在另一方面,乘客不解決軟鏈接,當它被安裝到主機的根(根據this guide):

sudo ln -s /var/local/railapps/redmine-1.1/public /var/www/rails/redmine 

root /var/www/rails/redmine; 
passenger_enabled on; 

我正在從客運錯誤:No such file or directory - config/environment.rb/var/www/rails,這意味着它試圖獲取不是來自鏈接目標的相對路徑,而是來自鏈接本身。如果我做了鏈接到主redmine的文件夾,整個事情的作品:

sudo ln -s /var/local/railapps/redmine-1.1 /var/www/rails/redmine 

root /var/www/rails/redmine/public; 
passenger_enabled on; 

所以,問題是,爲什麼乘客能夠「子URI」模式來解決軟鏈接,而不是在「主機根「模式?是否有一些額外的設置?

回答

2

它不會在「主機根模式」下執行以支持Capistrano風格的部署目錄。這在this section of the documentation of the Apache version中詳細記錄。 Apache版本允許自定義符號鏈接解析行爲(出於向後兼容的原因),而Nginx版本僅支持一種類型的行爲。

+0

這是正確的;看到[這個SO問題和答案](http://stackoverflow.com/questions/4485349/can-my-public-directory-be-a-symlink-with-rails-3-passenger-3-nginx-0-8/4689901#4689901)可能的解決方法。 – 2011-02-06 19:28:30

0

自乘客版本2以來,符號鏈接在文檔根目錄上未解析。您可以更改該設置:

PassengerResolveSymlinksInDocumentRoot on