小编Sno*_*all的帖子

Laravel - 超出锁定等待超时

我的代码中有很多事务,如果在其中一个不触发提交或回滚的事务中执行时发生错误,则数据库被锁定,任何后续访问数据库的尝试都会导致:

production.ERROR: PDOException: SQLSTATE[HY000]: General error: 1205 Lock wait timeout exceeded; try restarting transaction in /home/forge/default/vendor/laravel/framework/src/Illuminate/Database/Connection.php:390

在控制器中:

DB::beginTransaction();

try {
    //Code that uses exec() to process some images. <-- If code breaks here, then the above error appears on subsequent requests.
    //Code that accesses the database
}
catch(\Exception $e){
    DB::rollback();
    throw $e;
}
DB::commit();
Run Code Online (Sandbox Code Playgroud)

所以即使是php artisan migrate:refresh或php artisan migrate:reset也会停止工作.我该怎么办呢?

php mysql transactions laravel

11
推荐指数
2
解决办法
1万
查看次数

会议席卷彩票

有人可以解释会议席卷抽奖的内容吗?我已经为Laravel框架附加了默认会话配置文件.

问题:1.它表示某些会话驱动程序必须手动扫描其存储位置.有人可以描述这个过程以及为什么有必要吗?哪些会话驱动程序需要此操作?2.为什么需要彩票?如果说某种形式的存储(数据库)已满,为什么它必须是随机的?为什么框架在检测到驱动程序已满时不能扫描旧会话?

/*
|--------------------------------------------------------------------------
| Session Sweeping Lottery
|--------------------------------------------------------------------------
|
| Some session drivers must manually sweep their storage location to get
| rid of old sessions from storage. Here are the chances that it will
| happen on a given request. By default, the odds are 2 out of 100.
|
*/

'lottery' => array(2, 100),
Run Code Online (Sandbox Code Playgroud)

php session laravel

9
推荐指数
1
解决办法
2274
查看次数

Chrome将Laravel dd输出为单行而不进行格式化

我想在Ajax调用中转储和死掉对象的内容.在Chrome中,响应是:

<script> Sfdump = window.Sfdump || (function (doc) { var refStyle = doc.createElement('style'), rxEsc = /([.*+?^${}()|\[\]\/\\])/g, idRx = /\bsf-dump-\d+-ref[012]\w+\b/, keyHint = 0 <= navigator.platform.toUpperCase().indexOf('MAC') ? 'Cmd' : 'Ctrl', addEventListener = function (e, n, cb) { e.addEventListener(n, cb, false); }; (doc.documentElement.firstElementChild || doc.documentElement.children[0]).appendChild(refStyle); if (!doc.addEventListener) { addEventListener = function (element, eventName, callback) { element.attachEvent('on' + eventName, function (e) { e.preventDefault = function () {e.returnValue = false;}; e.target = e.srcElement; callback(e); }); }; } function toggle(a, recursive) { var s = a.nextSibling …
Run Code Online (Sandbox Code Playgroud)

google-chrome laravel

6
推荐指数
1
解决办法
929
查看次数

使用数据库事务防止竞争条件(Laravel)

如何防止发生这种竞赛情况?我知道Laravel中的事务正在阻止更新,但是如何防止使用过时的数据呢?有没有一种方法可以在进行另一个事务时锁定数据库以防止读取?(即,第二个请求是否等待第一个请求完成?)

假设数据库中主键id = 7的用户名字段为空。

请求1进入并执行以下操作:

public function raceCondition1() {

    DB::beginTransaction();

    //Get the model with primary key 7
    $user = User::findorfail(7);

    sleep(6);

    $user->username = 'MyUsername';

    $user->save();

    DB::commit();
}
Run Code Online (Sandbox Code Playgroud)

秒钟后,我运行请求2,该请求只是将某些内容连接到用户名列并保存:

public function raceCondition2() {

    DB::beginTransaction();

    $user = User::findorfail(7);

    sleep(6);

    $user->username = 'USER_' . $user->username;

    $user->save();

    DB::commit();
}
Run Code Online (Sandbox Code Playgroud)

在这种情况下,数据库中的结果为:USER_

在第一个请求可以保存之前,从数据库读取的第二个请求使用了过时的NULL值。有没有一种方法可以在进行另一个事务时锁定数据库以防止读取?(即,第二个请求是否等待第一个请求完成?)

php sql database transactions laravel

5
推荐指数
1
解决办法
3289
查看次数

鼠标向上与点击

在应用于单个元素的 AngularJS 指令中,假设我有以下代码。

$document.on('click', function(event){
    console.log('click');
});

$document.on('mouseup', function(event){
    console.log("mouseup");
});
Run Code Online (Sandbox Code Playgroud)

尽管有这个顺序,Mouseup 总是在点击前触发。会一直这样吗?如果单击只是鼠标按下然后是鼠标抬起,那么尽管注册的顺序如此,为什么它会在之后触发?

javascript angularjs

3
推荐指数
1
解决办法
2667
查看次数

将ImageMagick结果输出为Base64字符串而不是文件

在命令行上,我可以执行以下操作:

convert sourceimg.jpg | base64
Run Code Online (Sandbox Code Playgroud)

并接收代表图像的输出字符串。但是,如果我向图像添加任何转换,则不会输出任何内容:

convert sourceimage.jpg -resize 400x400 output.img | base64
Run Code Online (Sandbox Code Playgroud)

有没有一种快速的方法来获取imagemagick命令的结果的base64表示形式?

imagemagick

3
推荐指数
2
解决办法
3707
查看次数

如何确保在销毁互斥体之前没有其他线程立即获取锁

在 pthread_mutex_destroy 的 Linux 手册页中,有以下代码片段。关于销毁互斥锁​​的过程,我不明白的一件事是,我们如何知道在 pthread_mutex_unlock 和 pthread_mutex_destroy 之间没有其他线程尝试获取所述互斥锁上的锁?

通常情况下,应该如何处理?1)是否应该使用额外的互斥锁来确保这种情况不会发生?2)或者客户有责任在引用计数达到0后不尝试增加引用计数?

obj_done(struct obj *op)
{
    pthread_mutex_lock(&op->om);
    if (--op->refcnt == 0) {
        pthread_mutex_unlock(&op->om);
(A)     pthread_mutex_destroy(&op->om);
(B)     free(op);
    } else
(C)     pthread_mutex_unlock(&op->om);
}
Run Code Online (Sandbox Code Playgroud)

c mutex locks

2
推荐指数
1
解决办法
236
查看次数