小编Jos*_*ord的帖子

MySQL使用Model Factories锁定等待超时

我在测试类的方法中生成了一个非常小的数据集,我曾尝试过在setUp()方法中生成数据,但是每次测试都会导致锁定等待超时.将此代码移出setUp()方法并将其放入自己的方法中有所帮助.这意味着不是每个测试都抱怨锁.

我正在使用Laravel 5.2中的DatabaseTransactions特性,以便在每个测试用例运行之前重置数据库.

在我所拥有的每个测试用例中,我都会调用这样的模拟数据.

$data = self::getRandomCommunityWithAssociatedData();
Run Code Online (Sandbox Code Playgroud)

实际方法仅为创建的社区生成一些社区对象和用户对象.

public static function getRandomCommunityWithAssociatedData()
{
    self::$communities = factory(\Community::class, self::COMMUNITIES_TO_CREATE)->create()->each(function ($community) {
        self::$users[$community->id] = factory(User::class, self::USERS_TO_CREATE)->create()->each(function (\User $user) use ($community) {
            $user->community()->associate($community);
        });

        self::$admins[$community->id] = factory(User::class, 'superadmin', self::ADMINS_TO_CREATE)->create()->each(function (\User $admin) use ($community) {
            $admin->community()->associate($community);
        });
    });

    $community = self::$communities[mt_rand(0, count(self::$communities) - 1)];

    return ['community' => $community, 'users' => self::$users[$community->id], 'admins' => self::$admins[$community->id]];
}
Run Code Online (Sandbox Code Playgroud)

该方法中使用了一些常量,它们用于确定要创建的每个对象的数量.目前,我正在为每个社区实例创建2个社区,3个用户和2个管理员.

锁定等待超时是不可预测的,一次运行可能发生在第一个测试用例上,另一次运行可能发生在第五个测试用例上.

我试图将MySQL等待锁定的时间增加到500秒,我仍然得到超时.增加这个时间确实不是一个选择,因为测试需要能够在所有环境中运行.

在使用Laravel 5.2中的DatabaseTransactions特性和如此小的数据集时,为什么我可能会获得这些锁定等待超时的任何想法?

1) UserEmailNotificationsTest::testActiveAdminReceivesNewCommentEmailNotification
Illuminate\Database\QueryException: SQLSTATE[HY000]: General error: 1205 Lock wait timeout exceeded; …
Run Code Online (Sandbox Code Playgroud)

php mysql laravel eloquent laravel-5.2

23
推荐指数
1
解决办法
884
查看次数

Laravel Passport - 不支持授权类型

我根据文档安装了Laravel Passport,并且修改了所需的代码的所有区域.

我正在设置密码授予令牌,以便用户在使用他们的站点用户名和密码登录时能够获得API令牌.当涉及到grant_type时,我遇到了一个问题.出于某种原因,Laravel抱怨无效的授权类型.

{
  "error": "unsupported_grant_type",
  "message": "The authorization grant type is not supported by the authorization server.",
  "hint": "Check the `grant_type` parameter"
}
Run Code Online (Sandbox Code Playgroud)

这些是我要发布的字段 /oauth/token

client_id = 4
client_secret = SMiYE7XqDNtXKQnmkYmFnXxfAaV83vRhnJ9zwCtZ
username = jcrawford@domain.com
password = **************
grant_type = password
scope = *
Run Code Online (Sandbox Code Playgroud)

我跑了php artisan passport:install,我也跑了php artisan passport:client --password

这两个命令都有效,并且都创建了客户端和机密,但是,我似乎无法通过grant_type的错误.

关于我应该怎样看待解决的任何建议,以便密码授予令牌对我有用?

laravel-5.3 laravel-passport

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

Jekyll Pygments Processing

我一直在和Jekyll和Pygments争吵一段时间.我安装了pygments并生成了css文件,但是当我运行Jekyll来生成网站时,代码突出显示似乎没有正确生成.

这是我用于处理的一些示例代码

{% highlight php lineos %}
/**
 * Passing by reference
 *
 * Outputs
 *
 * 10 - before add() call
 * 10 - after add() call
 * 15 - after addref() call
 */
$a = 10;
echo $a;
add($a);
echo $a;
addref($a);
echo $a;

function addref(&$a)
{
    $a += 5;
}

function add($a)
{
    $a += 5;
}
{% endhighlight %}
Run Code Online (Sandbox Code Playgroud)

这是Jekyll建立我的网站后的样子.

<div class="highlight"><pre><code class="php"><span class="x">/**</span>
<span class="x"> * Passing by reference</span>
<span class="x"> *</span>
<span class="x"> * …
Run Code Online (Sandbox Code Playgroud)

highlighting pygments jekyll

9
推荐指数
2
解决办法
1450
查看次数

带有Dropzonejs的Laravel Passport

我正在开发一个具有运行Laravel Passport的API层的项目.我已将createFreshApiToken添加到我的应用程序中,并且我的所有jQuery ajax请求都正常工作.

今天我正在整合DropzoneJS,当我尝试上传文件时,它获得了401 Unauthorized.我检查了请求标头,并在cookie标头中设置了laravel_token.

当laravel_token包含在请求标头中时,什么会导致Laravel Passport抛出401 Unauthorized响应?

General  
Request URL:http://api.ryno.dev/api/post/photo  
Request Method:POST  
Status Code:401 Unauthorized  
Remote Address:127.0.0.1:80  

Response Headers  
Cache-Control:no-cache  
Connection:Keep-Alive  
Content-Length:28  
Content-Type:application/json  
Date:Wed, 15 Mar 2017 16:36:27 GMT  
Keep-Alive:timeout=5, max=100  
Server:Apache/2.2.31 (Unix) mod_wsgi/3.5 Python/2.7.12 PHP/7.0.12   mod_ssl/2.2.31 OpenSSL/1.0.2j DAV/2 mod_fastcgi/2.4.6 mod_perl/2.0.9 Perl/v5.24.0  
X-Powered-By:PHP/7.0.12  
X-RateLimit-Limit:60  
X-RateLimit-Remaining:59  


Request Headers  
Accept:application/json  
Accept-Encoding:gzip, deflate  
Accept-Language:en-US,en;q=0.8  
api-version:1  
Cache-Control:no-cache  
Connection:keep-alive  
Content-Length:4802  
Content-Type:multipart/form-data; boundary=---- WebKitFormBoundaryEqAfOqBqekRWHC6B  
Cookie:laravel_token=eyJpdiI6InJzRG5SNkVmYW1GMDJmd3pPTUhnWmc9PSIsInZhbHVlIjoiUk1iU01XVm9Ydytyb3NXUDlEVngwUnlGUXNhSkdvcFFpaXhwNSt6XC9XXC9TOHlcL3MxWjl2MkVxU1NCNjV6bmNka2w3dlNlTmJrRXVTVkVhQnZOd1dwZTRpaXdscll1WHVsUm1CMHBkbVdiNVprZXZmT2pRaTdySjRXRzhWY1FGV25JNm5qXC9TNzV6dEJzKzlsclZwRDVMczF6TVduODJIa0s1MVNQSXRMc2dteWtuU1lpdGJUQVJRS3BlS2E5dmd2Vlg2QXJzMldHQUM2Uk15RldUWnF4bXlcL1AzNTgwc1Q3YWpTVWIyVHYrYjN5QllzNGt3TDJcL1VsYmt6UFpudDVFaTdpK2JMZ01RcTRcL2lySUFRQ1hxaXF3PT0iLCJtYWMiOiJmODZiMzg1M2QyYjNlYmUwZWI2NWI3OWY0OTZjMDIxNjYwYjc3MGQxZGZjYzg2ZmQ1M2FjMTA1NDRiODAwZWVmIn0%3D; XSRF-TOKEN=eyJpdiI6IlNha2syNGFldngrM2FZUU9ZeEpNWUE9PSIsInZhbHVlIjoiVEM1RllaaGl1XC9UUWg4b2RuVkNlcnhod1EzXC9xSG9SN0w2dEZiV3RKbDJwQXdTeWtZS0pMODBEOFJvM1V1emNZdEJmOGJISFwvUjNkd2pBK2NXcTRlM2c9PSIsIm1hYyI6IjljMjg0MTI2NDFmNmYzNGU2ZmJiMWE4ODg3OGE4NWVmNmVhYzc5YzI4ZmNkYTRjZDI2M2Y1YWYwZjIzNzc2NGIifQ%3D%3D; laravel_session=eyJpdiI6IjBzRHhqcWRPdmdleVhlcURuOG4rYVE9PSIsInZhbHVlIjoiTkYzOHpiQ2dyY2tHSmV2Znl4RUpiNWdHZVBMaVJNaEI5YWdOcXVRRzdsSEZqMFp5cXFWOVBjYjBobmxLSXhJUFBab1JRbTZxUVhkekZVNjY3OUVkYmc9PSIsIm1hYyI6ImIxNjA0Y2E1NDdjNDc5YzA4NGYxNTgyMTNiMjdiY2RlODg0MzFjMDQ3N2ZjMTZiNDlmN2Q5Zjg3NWU0YTc1NWEifQ%3D%3D  
Host:api.ryno.dev  
Origin:http://api.ryno.dev  
Pragma:no-cache  
Referer:http://api.ryno.dev/post  
User-Agent:Mozilla/5.0 (Macintosh; Intel Mac OS X 10_12_3) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/56.0.2924.87 Safari/537.36  
X-Requested-With:XMLHttpRequest …
Run Code Online (Sandbox Code Playgroud)

laravel dropzone.js laravel-5.3 laravel-passport

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

Laravel 5.2事件测试:expectEvent虽然被解雇但没有看到事件被触发

我一直试图测试事件,我昨天工作了.那是在我开始重构测试代码以防止它过于重复之前.我添加了setUp方法调用以使用ModelFactories生成伪数据.这是在昨天的每个测试案例中完成的,如上所述它正在工作.

我认为这与使用setUp方法有关,但我不知道为什么会这样.首先,我尝试使用setUpBeforeClass()静态方法,因为它只在单元测试运行时运行一次.但是,在第一次调用setUp()之前,实际上并没有设置laravel应用程序......可能的错误可能是什么?这篇文章记录在Laravel中设置PHPUnit测试.

因此,我选择使用setUp方法,只是检查静态属性是否为null,如果它为null则生成数据,如果不是,它就会继续运行.

这是在项目上运行phpunit的输出

?  project git:(laravel-5.2-testing) ? phpunit
PHPUnit 5.2.10 by Sebastian Bergmann and contributors.

E                                                                  1 / 1 (100%)

Time: 8.94 seconds, Memory: 33.50Mb

There was 1 error:

1) UserEmailNotificationsTest::testNotificationSentOnGroupMediaSaving
Exception: These expected events were not fired: [\App\Events\GroupMediaSaving]

/Users/jcrawford/Dropbox/Work/Viddler/Repositories/l5_media_communities/vendor/laravel/framework/src/Illuminate/Foundation/Testing/Concerns/MocksApplicationServices.php:44
/Users/jcrawford/Dropbox/Work/Viddler/Repositories/l5_media_communities/vendor/laravel/framework/src/Illuminate/Foundation/Testing/TestCase.php:127

FAILURES!
Tests: 1, Assertions: 0, Errors: 1, Skipped: 8.
Run Code Online (Sandbox Code Playgroud)

这是我创建的单元测试文件的代码.

<?php
use Illuminate\Foundation\Testing\WithoutMiddleware;
use Illuminate\Foundation\Testing\DatabaseMigrations;
use Illuminate\Foundation\Testing\DatabaseTransactions;

class UserEmailNotificationsTest extends \TestCase
{
    use DatabaseTransactions;

    const COMMUNITIES_TO_CREATE = 3;
    const USERS_TO_CREATE = 10;
    const ADMINS_TO_CREATE = 5; …
Run Code Online (Sandbox Code Playgroud)

laravel laravel-5.2

7
推荐指数
2
解决办法
1836
查看次数

无法删除ENI - 已删除RDS

我试图将代码部署到ElasticBeanstalk环境.每当我尝试将此分支部署到环境时,EB会杀死所有实例,ELB,RDS等,并尝试重建但失败.这会使环境处于错误状态,因为它会删除RDS但不会删除安全组或ENI.当我尝试手动删除安全组时,它无法说有依赖对象.

我将其追溯到网络接口但是当我尝试将其分离(甚至强制分离)时,我收到一条错误,我没有获得许可.应该使用RDS实例删除此ENI,但事实并非如此.现在我根本无法摆脱环境,无法重建它.

我不确定为什么这个应用程序会导致环境尝试在每次部署时重新创建所有内容,因为EC2实例消失,然后当它们加载备份时它们被添加到ELB但是ELB无法进行健康检查,所以他们经常停止服务,环境处于死亡状态.如果我能以某种方式查看日志,了解导致环境与此应用程序崩溃的原因,那将是很好的.

让ElasticBeanstalk删除所有实例(包括RDS)对于部署是不可接受的,因为我们经常不得不重新播种这个,更不用说这是否已经部署到生产中它将擦除所有生产数据而我们不能拥有它.

有没有办法看到部署过程中发生了什么以及为什么会发生这种情况?

rds amazon-web-services amazon-elastic-beanstalk

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

液体和算术

我正在进行一些分页,我想知道是否有办法告诉液体只显示5页.我正在寻找的输出是

<<前5 6 7 8 9最后>>

我目前使用的逻辑有效,但它显示了所有30个页面.

{% for count in (2..paginator.total_pages) %}
    {% if count == paginator.page %}
        <span class="current">{{ count }}</span>
    {% else %}
        <a href="/page/{{ count }}/" class="pagenavi-page" title="{{ count }}">{{ count }}</a>
    {% endif %}
{% endfor %}
Run Code Online (Sandbox Code Playgroud)

我希望能够使2和paginator.total_pages成为动态的,我试过了

{% for count in ((paginator.page - 2)..(paginator.page + 2)) %} 
Run Code Online (Sandbox Code Playgroud)

但是,如果paginator.page = 5,则此代码实际上不会进行数学运算,那么循环为5..5并且不提供预期结果.我可以找出逻辑,这样它就不会出现负数而且按预期工作但是我怎么能在这里做数学方程?

pagination liquid jekyll

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