2013-05-07 80 views
4

問題是客戶告訴我們我們可以使用任何我們想要的操作系統,所以我們像往常一樣在CentOS上開發,當我們去上線時,他們說:「哦,新政策只有RHEL ,對不起「。我們的應用程序在CentOS上完美工作,但不在RHEL上。過濾器未運行之前

主要問題:

  • 路線由一個 '前'=> 'AUTH' 過濾器保護被保護在CentOS,但上RHEL不。這意味着用戶永遠不會被認證,所以Auth :: user()總是空的,所以後面的代碼都會失敗。

配置信息:

  • 兩臺服務器正在運行的Apache 2.2.15和5.4.13 PHP
  • 都具有相同的一組Apache模塊和PHP擴展。
  • 都有git相同的代碼。

我有一個解決方法,但它是沒有意義的: 在供應商/ laravel /框架/ src目錄/照亮/路由/ Router.php

在行1398,更改此:

public function filtersEnabled() 
{ 
    return $this->runFilters; 
} 

這樣:

public function filtersEnabled() 
{ 
    return true;//$this->runFilters; 
} 

你有任何想法是怎麼回事? 我無法在任何設置runFilters = false的地方找到配置選項。

+0

你可以嘗試一個不同的會話驅動程序? – aebersold 2013-05-07 17:38:37

+0

我也嘗試了本機會話驅動程序。行爲沒有變化。 – 2013-05-07 17:55:18

回答

12

我終於找到了問題。 前一段時間我正在運行單元測試,並在應用/測試中,我看到了這一點:!

class TestCase extends Illuminate\Foundation\Testing\TestCase { 
    public function createApplication(){ 
     $unitTesting = true; 
     $testEnvironment = 'testing'; 
     return require __DIR__.'/../../bootstrap/start.php'; 
} 

所以我想「真棒的$ testENvironment是配置的我討厭‘測試’默認值,因爲這是我們打電話給我們的QA環境,所以我把它改成了「phpunit」,然後創建了app/config/phpunit/*文件,它像開發中的魅力一樣運行。得到關於會話空的錯誤 起初我以爲laravel的數組會話處理程序被破壞了,所以我嘗試了原生的,但它也被破壞了。 但是後來我把一些日誌記錄通過了取出代碼,並發現實際上在過濾器沒有運行之前,所以認證沒有發生,所以會話是空的。 於是我追蹤的執行代碼從指數開始autoinclude到調度,並在路由一路下跌,我發現這個小硬編碼的寶石:

vendor/laravel/framework/src/Illuminate/Routing/RoutingServiceProvider.php 
    35   if ($app['env'] == 'testing') 
    36   { 
    37:    $router->disableFilters(); 
    38   } 

重命名我們的測試環境,以「測試」和我們的「 phpunit'環境到'測試'修復了這個問題。

也許我會做一個拉請求,使該env名稱可配置:)

+1

偉大的發現,任何想法他們爲什麼這樣做? – asdacap 2014-01-23 13:57:44

+0

昨晚我剛剛提交了拉請求:)不知道他們爲什麼這麼做。可能是因爲當時對它進行硬編碼更容易。其他優先級高於可配置的優先級。 – 2014-01-23 14:54:26

+0

我愛你的男人。花了整整一個晚上和早上發現問題 – TechyTimo 2016-09-18 08:54:13

相關問題