Миграция mysql5 / laravel 5 при ошибке докера Указанный ключ был слишком длинным - PullRequest
0 голосов
/ 27 декабря 2018

Я пытаюсь установить приложение laravel 5.7.19 в Docker и запустить миграцию. Я получил ошибку:

Migrating: 2018_01_01_145312_create_settings_table
Specified key was too long
   Illuminate\Database\QueryException  : SQLSTATE[42000]: Syntax error or access violation: 1071 Specified key was too long; max key length is 767 bytes (SQL: alter table `settings` add unique `settings_name_unique`(`name`))

  at /var/www/html/vendor/laravel/framework/src/Illuminate/Database/Connection.php:664
    660|         // If an exception occurs when attempting to run a query, we'll format the error
    661|         // message to include the bindings with SQL, which will make this exception a
    662|         // lot more helpful to the developer instead of just the database's errors.
    663|         catch (Exception $e) {
  > 664|             throw new QueryException(
    665|                 $query, $this->prepareBindings($bindings), $e
    666|             );
    667|         }
    668| 

  Exception trace:

, где настройки определены как:

<?php

use Illuminate\Support\Facades\Schema;
use Illuminate\Database\Schema\Blueprint;
use Illuminate\Database\Migrations\Migration;

class CreateSettingsTable extends Migration
{
    /**
     * Run the migrations.
     *
     * @return void
     */
    public function up()
    {
        Schema::create('settings', function (Blueprint $table) {
            $table->increments('id')->unsigned();
            $table->string('name', 255)->unique();
            $table->string('value', 255);
            $table->timestamp('created_at')->useCurrent();
            $table->timestamp('updated_at')->nullable();

            $table->index(['created_at'], 'settings_created_at_index');
        });
        Artisan::call('db:seed', array('--class' => 'SettingsWithInitData'));
    }

    /**
     * Reverse the migrations.
     *
     * @return void
     */
    public function down()
    {
        Schema::dropIfExists('settings');
    }
}

Файл сеялки, которыйТриггером является Votes / database / seed / SettingsWithInitData.php, в котором есть строки:

public function run()
{
    DB::table('settings')->insert([
        'name' => 'site_name',
        'value' =>  'Select & Vote',
    ]);

    DB::table('settings')->insert([
        'name' => 'copyright_text',
        'value' =>  '© 2018 - 2018 All rights reserved',
    ]);

    DB::table('settings')->insert([
        'name' => 'elastic_automation',
        'value' =>  'N',
    ]);

Ни одно из полей настройки-> name не содержит более 40 символов, и у меня не было проблем в моей ламповой системе.

В phpmyadmin я создал новую базу данных с utf8_general_ci.

Проверка созданной таблицы в phpmyadmin Я не вижу уникального индекса в поле имени: https://imgur.com/a/2RfeyGn SHOW VARIABLES имеет большой вывод, который из них можетиметь значение в этом случае?

Что не так?

Мой docker-compose.yml содержит строки:

version: '3.1'

services:

    web:

        build:
            context: ./web
            dockerfile: Dockerfile.yml

        environment:
            - APACHE_RUN_USER=www-data
        volumes:
            - ${APP_PATH_HOST}:${APP_PTH_CONTAINER}
        ports:
            - 8081:80
        working_dir: ${APP_PTH_CONTAINER}

    db:
        image: mysql:5.6.41
        restart: always
        environment: 
            MYSQL_ROOT_PASSWORD: 1
        volumes:
            - ${DB_PATH_HOST}:/var/lib/mysql


    phpmyadmin:
        depends_on:
          - db
        image: phpmyadmin/phpmyadmin
        restart: always
        ports:
          - 8082:80
        environment:
          PMA_HOST: db
          MYSQL_ROOT_PASSWORD: 1


    composer:
        image: composer:1.8
        volumes:
            - ${APP_PATH_HOST}:${APP_PTH_CONTAINER}
        working_dir: ${APP_PTH_CONTAINER}
        command: composer install --ignore-platform-reqs

Спасибо!

1 Ответ

0 голосов
/ 27 декабря 2018

Это потому, что вы запускаете его на MySQL ниже версии v5.7.7.Чтобы решить эту проблему, измените версию MySQL на docker-compose.yml или измените AppServiceProvider.php

use Illuminate\Support\Facades\Schema;

public function boot()
{
    // add this line
    Schema::defaultStringLength(191);
}

Источник: https://laravel -news.com / laravel-5-4-ключ слишком долго ошибки

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...