2009-11-24 88 views
4

在本地,我的應用運行良好並寫入其日誌。未寫入(乘客)的日誌文件

我的生產服務器正在運行帶有運行Passenger的Apache服務器的CentOS。當試圖調試時,我注意到我的日誌文件沒有被寫入。我做的第一件事是chmod 0666他們,當我發現沒有工作,我看着我的Apache日誌。我發現這個:Rails錯誤:無法訪問日誌文件。請確保/var/www/vhosts/mysite.com/rails/exp/releases/20091124020342/log/production.log存在並且是chmod 0666.日誌級別已提升爲WARN,輸出指向STDERR,直到出現問題是固定的。

(注:我與Capistrano的部署)

無論如何,我用Google搜索了一圈,發現有人說這是一個SELinux的問題,所以我看着乘客的文檔,發現這個:http://www.modrails.com/documentation/Users%20guide.html#_my_rails_application_8217_s_log_file_is_not_being_written_to

這基本上是說做這:chcon -R -h -t httpd_sys_content_t/path/to/your/rails/app

但是,當我填寫正確的路徑時,我得到:Operation not supported。

很難過......有什麼想法嗎?

+1

在Server Fault上可能會更好嗎?這似乎更像是一個管理問題,而不是一個編程問題。 – eswald 2009-11-24 04:09:33

+0

好主意,會把它放在那裏。謝謝 – asdfasdfasdfasdf 2009-11-24 04:10:24

回答

4

你的日誌文件中「ls -l」的結果是什麼?在Ubuntu上,我必須確保acl在日誌文件上是正確的。我通常解決,通過使用

sudo chown -R deploy:deploy /path/to/app 

部署是乘客運行用戶。

3

我遇到了我的Ubuntu的服務器10.x的同樣的問題。這是我在排除故障時學到的。

  • 如前所述,在文檔中,Passenger以config/environment.rb文件的所有者的身份運行rails ruby​​進程。除非您做了特別的事情,否則這通常與整個rails應用程序目錄的所有者相同。在capistrano部署的情況下,這是capistrano用戶。
  • 如果environment.rb文件是由根(很可能是因爲您正在部署根)擁有客運運行軌道流程作爲「沒人」

可以看到哪些用戶的進程運行經由top命令(或其他任何技術)。

在任何一種情況下 - 我的發生是後者 - 如果rails進程無法寫入日誌文件,則日誌(duh)中不顯示任何內容。 Rails將忽略此權限被拒絕的錯誤,並嘗試正常處理請求。

解決方案是確保rails ruby​​進程作爲擁有您的rails部署,config/environment.rb文件和日誌目錄和文件的相同用戶運行。

這可以是depryment配置步驟,以chown問題的文件和目錄或配置apache,並告訴它作爲特定用戶運行ruby進程(比如,根,而不是沒有人)。顯然是不建議作爲root運行,但如果你這樣做,不管是什麼原因,以及需要看到鐵軌原木正確寫入,你可以,如果你是不是root部署中加入以下

# in /etc/apache2/apache2.conf 
PassengerDefaultUser root 

做到這一點(在另一臺服務器上就是這種情況),典型的情況應該是rails app目錄由非root用戶擁有,乘客應該以同一用戶的身份運行rails進程。一切都應該工作。

[1] http://www.modrails.com/documentation/Users%20guide%20Apache.html#_the_rails_application_reports_that_it_8217_s_unable_to_start_because_of_a_permission_error

+0

添加PassengerDefaultUser根設置爲我解決了一些問題。之前,這個日誌錯誤似乎非常神祕。謝謝!請參閱http://stackoverflow.com/questions/31373281/rails-4-cannot-access-log-file – julian 2015-07-13 21:04:56