可不可以这样装系统.我新买的固态硬盘装系统了一个硬盘,想

几个常见的Laravel报错及解决方案
  我已经用了一段时间的
框架了,期间遇到了不少问题,有一些调试起来着实不太容易,本文筛选出几个,如果能让大家在开发中少走一些弯路,那我就算没白写。  报错:「Can’t swap PDO instance while within transaction」  通过查询 Laravel 源代码,可以确认异常是在 setPdo 方法中抛出的: transactions &= 1) {
throw new RuntimeException("
Can't swap PDO instance while within transaction.
$this-&pdo = $
?&  按字面意思理解,出现此错误是因为在开启了事务的情况下,切换了数据库连接。不过有时候,即便代码里没有显式的切换数据库连接,也有可能出现此错误。比如说在执行查询语句出错的时候,系统会通过 tryAgainIfCausedByLostConnection 方法判断问题是不是因为丢失连接导致的,如果是,那么系统会通过 reconnect 方法重新连接,在重新连接的时候,系统会通过 disconnect 方法执行一些清理工作,其中调用了 setPdo 方法。  理清了前因后果,自然就知道如何解决问题了:检查网络情况,确认数据库连接丢失的原因,这可能是某个设备有问题,也可能是某个 timeout 设置不当所致。一个相对 dirty 的处理方法是在查询前执行一下 DB::reconnect() 方法重新连接一下数据库。  报错:「Cannot delete job: NOT_FOUND」  此问题实际上和 Laravel 没太大关系,而是队列服务 Beanstalk 导致的。Beanstalk  要解决这个问题,需要先理解一个消息的生命周期:当一个消息被放入队列的时候,它就进入了 READY 状态,与此同时,它会关联一个 TTR(time to run) 计时器,表示此消息允许运行的时间,当此消息被消费时,它就进入了 RESERVED 状态,消费完后,此消息就会被删除,如果消费的时间过长,比 TTR 还长,那么系统会认为认为此消费者已经挂了,进而会把消息从 RESERVED 状态退回到 READY 状态,交给另一个消费者重新处理。于是乎同一个消息可能会被多个消费者处理,第一个处理完的消费者可以正常的删除消息,而其余的消费者在删除消息的时候就会报无法删除的错误。  解决方法很简单,首先,需要确保 TTR 的设置不能太小;其次,实际上 Beanstalk 提供了一个专门的 touch 命令来解决执行时间过长的问题,此外,有些时候我们可能需要在应用层面上通过加锁来规避同一个消息被多个消费者同时处理的情况。  报错:「No query results for model」   在激活了 Laravel 读写分离的前提下,当消费者处理消息的时候,可能会收到类似错误。一个有潜在问题的队列命令大概如下所示:bar = Bar::find($id);
public function handle()
// $this-&bar
?&  很明显,当开启了 Laravel 读写分离的时候,因为主从延迟的缘故,所以 find 可能查询不到相应的数据,一旦我们分析到了这里,那么很可能会把写法修改成下面的样子:bar = Bar::onWriteConnection()-&find($id);
public function handle()
// $this-&bar
?&   也就是说,通过 Laravel 的 onWriteConnection 方法把查询固定在主服务器上,不过实际上无效。问题症结在于反序列化的时候,系统会在从服务器上一次 findOrFail 调用。class)-&findOrFail($value-&id) : $
?& 因为我们无法 HACK 到框架内部,所以 onWriteConnection 就没有意义了。其实换个角度看问题,只要在系列化的时候,保证别用数据库对象做属性即可:id = $
public function handle()
$bar = Bar::onWriteConnection()-&find($this-&id);
关注微信公众号
扫一扫关注微信公众号Laravel使用中几个常见的错误总结-Php框架模板-Php教程-壹聚教程网Laravel使用中几个常见的错误总结
Laravel使用中经常会碰到一些问题了,今天我们一起来看看关于Laravel报错的问题希望这篇文章能够帮助到各位朋友,有兴趣的可以进来看看。
我已经用了一段时间的 Laravel 框架了,期间遇到了不少问题,有一些调试起来着实不太容易,本文筛选出几个,如果能让大家少走一些弯路,那我就算没白写。
报错:「Can&t swap PDO instance while within transaction」
通过查询 Laravel 源代码,可以确认异常是在 setPdo 方法中抛出的:
public function setPdo($pdo)
&&& if ($this-&transactions &= 1) {
&&&&&&& throw new RuntimeException(&
&&&&&&&&&&& Can't swap PDO instance while within transaction.
&&&&&&& &);
&&& $this-&pdo = $
&&& return $
?&按字面意思理解,出现此错误是因为在开启了事务的情况下,切换了连接。不过有时候,即便代码里没有显式的切换数据库连接,也有可能出现此错误。比如说在执行查询语句出错的时候,系统会通过 tryAgainIfCausedByLostConnection 方法判断问题是不是因为丢失连接导致的,如果是,那么系统会通过 reconnect 方法重新连接,在重新连接的时候,系统会通过 disconnect 方法执行一些清理工作,其中调用了 setPdo 方法。
理清了前因后果,自然就知道如何解决问题了:检查网络情况,确认数据库连接丢失的原因,这可能是某个设备有问题,也可能是某个 timeout 设置不当所致。一个相对 dirty 的处理方法是在查询前执行一下 DB::reconnect() 方法重新连接一下数据库。
报错:「Cannot delete job &ID&: NOT_FOUND」
此问题实际上和 Laravel 没太大关系,而是队列服务 Beanstalk 导致的。
&Beanstalk
要解决这个问题,需要先理解一个消息的生命周期:当一个消息被放入队列的时候,它就进入了 READY 状态,与此同时,它会关联一个 TTR(time to run) 计时器,表示此消息允许运行的时间,当此消息被消费时,它就进入了 RESERVED 状态,消费完后,此消息就会被删除,如果消费的时间过长,比 TTR 还长,那么系统会认为认为此消费者已经挂了,进而会把消息从 RESERVED 状态退回到 READY 状态,交给另一个消费者重新处理。于是乎同一个消息可能会被多个消费者处理,第一个处理完的消费者可以正常的删除消息,而其余的消费者在删除消息的时候就会报无法删除的错误。
解决方法很简单,首先,需要确保 TTR 的设置不能太小;其次,实际上 Beanstalk 提供了一个专门的 touch 命令来解决执行时间过长的问题,此外,有些时候我们可能需要在应用层面上通过加锁来规避同一个消息被多个消费者同时处理的情况。
报错:「No query results for model」
在激活了 Laravel 读写分离的前提下,当消费者处理消息的时候,可能会收到类似错误。一个有潜在问题的队列命令大概如下所示:
class Foo extends Command implements SelfHandling, ShouldBeQueued
&&& use InteractsWithQueue, SerializesM
&&& protected $
&&& public function __construct($id)
&&&&&&& $this-&bar = Bar::find($id);
&&& public function handle()
&&&&&&& // $this-&bar
?&很明显,当开启了 Laravel 读写分离的时候,因为主从延迟的缘故,所以 find 可能查询不到相应的数据,一旦我们分析到了这里,那么很可能会把写法修改成下面的样子:
class Foo extends Command implements SelfHandling, ShouldBeQueued
&&& use InteractsWithQueue, SerializesM
&&& protected $
&&& public function __construct($id)
&&&&&&& $this-&bar = Bar::onWriteConnection()-&find($id);
&&& public function handle()
&&&&&&& // $this-&bar
?&也就是说,通过 Laravel 的 onWriteConnection 方法把查询固定在主服务器上,不过实际上无效。问题症结在于反序列化的时候,系统会在从服务器上一次 findOrFail 调用。
protected function getRestoredPropertyValue($value)
&&& return $value instanceof ModelIdentifier
&&&&&&& ? (new $value-&class)-&findOrFail($value-&id) : $
?&因为我们无法 HACK 到框架内部,所以 onWriteConnection 就没有意义了。其实换个角度看问题,只要在系列化的时候,保证别用数据库对象做属性即可:
class Foo extends Command implements SelfHandling, ShouldBeQueued
&&& use InteractsWithQueue, SerializesM
&&& protected $
&&& public function __construct($id)
&&&&&&& $this-&id = $
&&& public function handle()
&&&&&&& $bar = Bar::onWriteConnection()-&find($this-&id);
?&以上就是我遇到的几个有代表性的报错,欢迎大家一起交流。
上一页: &&&&&下一页:相关内容20:04 提问
PHP laravel框架,第一次访问入口正常,再刷新报错
Whoops, looks like something went wrong. 这是什么情况,请大虾帮忙
按赞数排序
你是学php的吗, 哪个是详细的错误信息,你都不知道吗
其他相似问题问题对人有帮助,内容完整,我也想知道答案
问题没有实际价值,缺少关键内容,没有改进余地
在这篇教程中,我看到这种写法:
&?php namespace App\Http\C
class HomeController extends Controller {
public function index()
return view('home')-&withPages(Page::all());
这里的withPages()函数在laravel中根本就没有,我上Google搜了下,没找到答案,根据个人的猜测,我认为是withPages后面带的pages是一个映射到blade模板中的数据变量($pages),但是我查看laravel文档没有找到这种写法,只找到with('name', 'Victoria');,这种赋予变量的方式,哪位朋友知道这是怎么回事的,能给我给点资料吗?告诉我怎么回事吗?挺急的。
答案对人有帮助,有参考价值
答案没帮助,是错误的答案,答非所问
动态视图赋值!
以下等价:
view('home')-&withPages(Page::all());
view('home')-&with('pages', Page:all());
答案对人有帮助,有参考价值
答案没帮助,是错误的答案,答非所问
在前面一章:有条评论是:
withPages是指查询Pages表
这篇文章是去年的,比较旧了,你可以看新版教程:当然也是个不错的教程网站。
答案对人有帮助,有参考价值
答案没帮助,是错误的答案,答非所问
这种方法你可以理解为语法糖
同步到新浪微博
分享到微博?
Hi,欢迎来到 SegmentFault 技术社区!⊙▽⊙ 在这里,你可以提出编程相关的疑惑,关注感兴趣的问题,对认可的回答投赞同票;大家会帮你解决编程的问题,和你探讨技术更新,为你的回答投上赞同票。
明天提醒我
关闭理由:
删除理由:
忽略理由:
推广(招聘、广告、SEO 等)方面的内容
与已有问题重复(请编辑该提问指向已有相同问题)
答非所问,不符合答题要求
宜作评论而非答案
带有人身攻击、辱骂、仇恨等违反条款的内容
无法获得确切结果的问题
非开发直接相关的问题
非技术提问的讨论型问题
其他原因(请补充说明)
我要该,理由是:
扫扫下载 Applaravel框架执行出现错误
在laravel里有个 ::class 的报错,编译也不通过,这是什么原因。我是直接在网上下的框架。
错误提示:Parse error:
syntax error, unexpected 'class' (T_CLASS), expecting identifier (T_STRING) or variable (T_VARIABLE) or '{' or '$' in
这个是php版本问题,laravel5.1的php版本要求是PHP &= 5.5.9
--- 共有 1 条评论 ---
谢谢,已改完

我要回帖

更多关于 新买的硬盘怎么装系统 的文章

 

随机推荐