我是Laravel的新手,我继承了一个项目,我需要把它放在不同的服务器上。要明确我没有写这个应用程序,也不是Laravel专家。
话虽这么说,应用确实看起来相当稳固,我对框架印象深刻。我使用的最后一个PHP框架是Cake,它看起来像是旧版Rails的笨重克隆,这看起来好多了 - 但我离题了。
无论如何。其中一个视图在新服务器上呈现空白页面。我一行一行地注释掉,直到我再次开始工作。罪魁祸首是这一行:
$leads = Lead::all()->count();
当我评论它并用加载页面的整数替换前景变量时。
我通过使用它来解决问题:
DB::table('leads')->count()
现在它运作正常。
我仍然感到困惑,但是为什么这可以在旧服务器上运行(BTW年龄明显更新)但不是这个。
我没有旧服务器上的确切规格,但我将其移动到的服务器是运行php 5.4.12的 ubuntu框
MySQL是外部托管的,网站的两个实例都连接到它。
Lead模型如下所示:
<?php
class Lead extends Eloquent {
protected $guarded = array();
public function results()
{
return $this->hasMany('Result');
}
public function items()
{
return $this->hasMany('Item');
}
}
?>
重复:: all()代码我在其他服务器实例上运行时没有错误,只是没有在较新的设置上运行。
谢谢!
答案 0 :(得分:2)
我缩小了问题的范围,然后再回过头来获取更多信息 - 例如,第一步是定义不工作的意思。
$leads = Lead::all()->count()
实际上是否会返回一个值,但是这个值会使应用程序的另一部分中断吗?或者是$leads = Lead::all()->count()
打电话来打破事情?
您对错误的描述
其中一个视图一直在新服务器上呈现空白页面
使这听起来像PHP错误。由于Laravel应该抛出自己的错误(无论是一般错误页面,还是打开调试模式时出现Whoops错误),听起来你都在处理Laravel的错误处理程序可以解决的问题。抓住。
您需要正确获取PHP错误日志记录设置。 PHP通常会记录到自定义错误文件或apache / web-server日志。这可能是非常难以设置 - 我从一个独立的PHP页面开始,显然有错误
<?php
//no ending ; to create a parse error
$test = 1+1
并使用它来确定如何/在哪里记录通用PHP错误。完成上述操作后,您将能够详细了解调用时PHP / Laravel崩溃的原因。另外,在你的janky代码行前面放一个ini_set('display_errors', 1);
有时候足以让PHP把错误吐出到浏览器。
所有这一切,all
中对Lead::all()->count()
的调用实际上会加载整个集合对象(内存饥饿),然后对其进行计数。对DB::table('leads')->count()
的调用应使用简单的SQL计数(*)。加上PHP错误(与Laravel相比)会让我指向新服务器上的PHP memory_limit较低,和/或旧版本的PHP具有较低效率的对象处理消耗更多内存。
答案 1 :(得分:0)
嗯,这取决于您使用的laravel的版本,如果它是新的,5.0,
$ leads = User :: where(&#39; votes&#39;,&#39;&gt;&#39;,100) - &gt; get();
$ count = $ leads-&gt; count();
这样的事情肯定会奏效。