Laravel 5.4.36无法在AWS ECS容器

时间:2017-10-23 18:09:13

标签: php docker laravel-5.4 amazon-ecs fpm

我有一个自定义RegisterController,它使用RegistersUsers特征来注册用户。

use Illuminate\Support\Facades\Validator;

class RegisterController extends Controller
{
       use RegistersUsers;
 ...
}

在web.php(定义了路由)中,我执行以下操作来注册路由: Route::auth();

在View或frontend方面,我有一个自定义的视图(register.blade.php),我在其中向Register用户表单添加其他字段,如下所示: enter image description here

在我的RegisterController上,我有以下方法来验证表单

/**
 * Get a validator for an incoming registration request.
 *
 * @param  array  $data
 * @return \Illuminate\Contracts\Validation\Validator
 */
protected function validator(array $data)
{
    return Validator::make($data, [
        'name' => 'required|string|max:255|unique:users',
        'email' => 'required|string|email|max:255|unique:users',
        'gitHubUserName' => 'required|string|max:255|unique:users',
        'gitHubToken' => 'required|string|min:1',
        'password' => 'required|string|min:6|confirmed',
    ]);
}

请注意我的用户表不存储GitHub用户名和GitHub令牌。

我的create上有一个RegisterController函数,负责在验证通过时将(inserting)数据管理到适当的表中(users只是普通用户表由Laravel默认用户迁移,我有另一个存储github userName和GitHubPwd的表。

如果我php artisan --version,我已安装Laravel Framework 5.4.36。我也安装了PHP 7.1.9

现在,这在我当地的MAMP开发环境中运行得非常好。

当我在AWS ECS容器上推送它并点击我的用户注册表单上的注册按钮时,我看到一些奇怪的错误......所以这不起作用。

以下是错误:

错误1:PDOException:

SQLSTATE[42S22]: Column not found: 1054 Unknown column 'gitHubUserName' in 'where clause'

错误2:

SQLSTATE[42S22]: Column not found: 1054 Unknown column 'gitHubUserName' in 'where clause' (SQL: select count(*) as aggregate from `users` where `gitHubUserName` = tony)

简而言之,我注意到的是,而不是调用我自己的验证器进行表单请求验证,laravel提供的RegisterUser trait类调用模型验证器,如下所示: / p>

enter image description here

所以我提到了Laravel文档here,并通过添加手动验证器尝试了其他方法,如文档中所述:

 $validator =  Validator::make(request(), [
            'name' => 'required|string|max:255|unique:users',
            'email' => 'required|string|email|max:255|unique:users',
            'gitHubUserName' => 'required|string|max:255|unique:users',
            'gitHubToken' => 'required|string|min:1',
            'password' => 'required|string|min:6|confirmed',
        ]);

         if ($validator->fails()) {
            return redirect()->back()
                        ->withErrors($validator)
                        ->withInput();
         }

在对代码进行上述更改后,我也做了composer dump-autoload, php artisan config:clear, php artisan cache:clear

所以现在我看到了不同的错误:

enter image description here

这是调用堆栈的部分(最顶部的行):

in Controller.php (line 82)

at Controller->__call('validator', array(array('_token' => 'S0c2YolcTS4AzvxIaehe6OMZ0E4LZKnFTd55nmio', 'name' => 'Tony', 'email' => 'tony@example.com', 'password' => 'Secret', 'password_confirmation' => 'Secret', 'gitHubUserName' => 'attres', 'gitHubToken' => '4365463463546354635465')))
in RegistersUsers.php (line 31)
at RegisterController->register(object(Request))

同样,在本地docker容器或MAMP开发环境中,一切正常。当我构建新映像,容器并在AWS ECS容器上运行它时,我看到了这个问题。 任何人都有任何关于这种奇怪行为可能是什么原因的线索?

1 个答案:

答案 0 :(得分:0)

我终于弄明白了我的问题。在尝试找出原因时,我无法相信我忽略了验证规则语法。

问题在于Validator::make()方法中的验证规则:

  

' gitHubUserName' => '需要|串|最大:255 |独特:用户',

不应该有unique:users,因为users表中没有gitHubUserName列。

我更改了以下规则,一切都恢复正常了:

  

' gitHubUserName' => '需要|串|最高:255'