2013-05-07 59 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

相关问题