mylxsw / wizard

Wizard是一款开源的文档管理工具,支持Markdown/Swagger/Table类型的文档。
Apache License 2.0
2.18k stars 352 forks source link

关于 php artisan migrate:install、 php artisan migrate操作的问题 #17

Closed Devnull6 closed 4 years ago

Devnull6 commented 5 years ago

php artisan migrate:install 提示成功,但是status状态却发现如下部分表并未创建,所以在执行php artisan migrate 提示不成功,详情如下图所示

#php artisan migrate:status ... | Yes | 2018_04_11_172816_modify_project_add_catalog | 1 | | Yes | 2018_04_12_143655_create_project_star_table | 1 | | No | 2018_05_10_105015_create_tags_table | | | No | 2018_05_10_105629_create_page_tag_table | | | No | 2018_12_11_164112_add_sort_to_nav | | | No | 2018_12_11_164721_add_sort_to_nav_history | | | No | 2019_04_20_141850_add_sync_to_pages | | | No | 2019_04_20_141934_add_sync_filed_to_page_histories | | | No | 2019_04_27_214733_add_objectguid_column | |

# php artisan migrate:install Migration table created successfully. # php artisan migrate Migrating: 2014_10_12_000000_create_users_table Migrated: 2014_10_12_000000_create_users_table Migrating: 2014_10_12_100000_create_password_resets_table Migrated: 2014_10_12_100000_create_password_resets_table Migrating: 2017_07_31_012730_create_project_table Migrated: 2017_07_31_012730_create_project_table Migrating: 2017_07_31_013758_create_page_table Migrated: 2017_07_31_013758_create_page_table Migrating: 2017_08_01_151100_create_page_history_table Migrated: 2017_08_01_151100_create_page_history_table Migrating: 2017_08_03_232417_create_operation_logs_table Migrated: 2017_08_03_232417_create_operation_logs_table Migrating: 2017_08_04_143640_create_template_table Migrated: 2017_08_04_143640_create_template_table Migrating: 2017_08_06_115558_create_group_table Migrated: 2017_08_06_115558_create_group_table Migrating: 2017_08_06_120713_create_user_group_ref_table Migrated: 2017_08_06_120713_create_user_group_ref_table Migrating: 2017_08_06_122310_update_user_table Migrated: 2017_08_06_122310_update_user_table Migrating: 2017_08_06_124106_create_project_group_ref_table Migrated: 2017_08_06_124106_create_project_group_ref_table Migrating: 2017_08_10_093939_create_categories_table Migrated: 2017_08_10_093939_create_categories_table Migrating: 2017_08_11_171545_create_share_table Migrated: 2017_08_11_171545_create_share_table Migrating: 2017_08_17_224954_create_comments_table Migrated: 2017_08_17_224954_create_comments_table Migrating: 2017_08_18_133716_create_attachments_table Migrated: 2017_08_18_133716_create_attachments_table Migrating: 2017_08_19_002350_create_notifications_table Migrated: 2017_08_19_002350_create_notifications_table Migrating: 2017_09_19_174315_modify_operation_logs Migrated: 2017_09_19_174315_modify_operation_logs Migrating: 2017_09_24_145801_modify_user_table Migrated: 2017_09_24_145801_modify_user_table Migrating: 2018_01_27_150601_modify_project_table Migrated: 2018_01_27_150601_modify_project_table Migrating: 2018_04_11_172516_create_project_catalogs_table Migrated: 2018_04_11_172516_create_project_catalogs_table Migrating: 2018_04_11_172816_modify_project_add_catalog Migrated: 2018_04_11_172816_modify_project_add_catalog Migrating: 2018_04_12_143655_create_project_star_table Migrated: 2018_04_12_143655_create_project_star_table Migrating: 2018_05_10_105015_create_tags_table

In Connection.php line 664:

SQLSTATE[42000]: Syntax error or access violation: 1071 Specified key was too long; max key length is 767 bytes (SQL: alter ta
ble wz_tags add unique wz_tags_name_unique(name))

In PDOStatement.php line 119:

SQLSTATE[42000]: Syntax error or access violation: 1071 Specified key was too long; max key length is 767 bytes

In PDOStatement.php line 117:

SQLSTATE[42000]: Syntax error or access violation: 1071 Specified key was too long; max key length is 767 bytes

mylxsw commented 5 years ago

该错误是因为 MySQL 版本低于 5.7,在低版本的 MySQL 中可能出现该问题,现在已修复,更新下代码 再试试 php artisan migrate

如果还有问题的话试试下面两个方案(二选一)

Devnull6 commented 5 years ago

5.5.60-MariaDB 这边是mariadb,不知道是否也支持,我先试试升级看看

Devnull6 commented 5 years ago

10.3.14-MariaDB 中提示不支持数据库引擎“ARCHIVE”,但其实默认engine是 innodb,报错时候error也没有对应记录,难道是maridb太新的原因? # php artisan migrate Migrating: 2014_10_12_000000_create_users_table Migrated: 2014_10_12_000000_create_users_table Migrating: 2014_10_12_100000_create_password_resets_table Migrated: 2014_10_12_100000_create_password_resets_table Migrating: 2017_07_31_012730_create_project_table Migrated: 2017_07_31_012730_create_project_table Migrating: 2017_07_31_013758_create_page_table Migrated: 2017_07_31_013758_create_page_table Migrating: 2017_08_01_151100_create_page_history_table Migrated: 2017_08_01_151100_create_page_history_table Migrating: 2017_08_03_232417_create_operation_logs_table

In Connection.php line 664:

SQLSTATE[42000]: Syntax error or access violation: 1286 Unknown storage engine 'ARCHIVE' (SQL: create table wz_operation_logs (id int unsigned not null auto_increment primary key, user_id int unsigned null comment '操作用户ID', message varchar(
255) null comment '日志消息内容', context text null comment '记录日志时候的上下文信息', created_at timestamp not null comm
ent '创建时间') default character set utf8mb4 collate 'utf8mb4_unicode_ci' engine = ARCHIVE)

In PDOConnection.php line 63:

SQLSTATE[42000]: Syntax error or access violation: 1286 Unknown storage engine 'ARCHIVE'

In PDOConnection.php line 61:

SQLSTATE[42000]: Syntax error or access violation: 1286 Unknown storage engine 'ARCHIVE'

# php artisan migrate:status +------+----------------------------------------------------+-------+ | Ran? | Migration | Batch | +------+----------------------------------------------------+-------+ | Yes | 2014_10_12_000000_create_users_table | 1 | | Yes | 2014_10_12_100000_create_password_resets_table | 1 | | Yes | 2017_07_31_012730_create_project_table | 1 | | Yes | 2017_07_31_013758_create_page_table | 1 | | Yes | 2017_08_01_151100_create_page_history_table | 1 | | No | 2017_08_03_232417_create_operation_logs_table | | | No | 2017_08_04_143640_create_template_table | | | No | 2017_08_06_115558_create_group_table | | | No | 2017_08_06_120713_create_user_group_ref_table | | | No | 2017_08_06_122310_update_user_table | | | No | 2017_08_06_124106_create_project_group_ref_table | | | No | 2017_08_10_093939_create_categories_table | | | No | 2017_08_11_171545_create_share_table | | | No | 2017_08_17_224954_create_comments_table | | | No | 2017_08_18_133716_create_attachments_table | | | No | 2017_08_19_002350_create_notifications_table | | | No | 2017_09_19_174315_modify_operation_logs | | | No | 2017_09_24_145801_modify_user_table | | | No | 2018_01_27_150601_modify_project_table | | | No | 2018_04_11_172516_create_project_catalogs_table | | | No | 2018_04_11_172816_modify_project_add_catalog | | | No | 2018_04_12_143655_create_project_star_table | | | No | 2018_05_10_105015_create_tags_table | | | No | 2018_05_10_105629_create_page_tag_table | | | No | 2018_12_11_164112_add_sort_to_nav | | | No | 2018_12_11_164721_add_sort_to_nav_history | | | No | 2019_04_20_141850_add_sync_to_pages | | | No | 2019_04_20_141934_add_sync_filed_to_page_histories | | | No | 2019_04_27_214733_add_objectguid_column | | +------+----------------------------------------------------+-------+

image

image

image

image

mylxsw commented 5 years ago

OK,了解了,操作日志存储用到了 ARCHIVE 存储引擎,Mariadb 10.0 版本之后默认是没有安装这个存储引擎的

The ARCHIVE storage engine was installed by default until MariaDB 10.0. In MariaDB 10.1 and later, the storage engine's plugin will have to be installed.

所以解决方案有下面这两种(推荐第一种

  1. 最简单的方式时在Mariadb中安装这个插件,只需要连接到Mariadb之后执行 INSTALL SONAME 'ha_archive'; 命令就可以了,不需要 重启数据库

  2. 第二种办法时不安装 ARCHIVE 存储引擎,修改 $WIZARD_HOME/database/migrations/2017_08_03_232417_create_operation_logs_table.php 文件的第 17 行,将$table->engine = 'ARCHIVE'; 注释掉

     Schema::create('wz_operation_logs', function (Blueprint $table) {
    -$table->engine = 'ARCHIVE';
    +// $table->engine = 'ARCHIVE';
    
     $table->increments('id');

参考

Devnull6 commented 5 years ago

按照法一执行后没问题了(INSTALL SONAME 'ha_archive';),不过发现跟demo画风有点差异呀! image

image image

Devnull6 commented 5 years ago

注册管理员账号时候也有问题 Symfony \ Component \ Debug \ Exception \ FatalThrowableError (E_ERROR) Class 'DOMDocument' not found image

mylxsw commented 5 years ago

那个是debug模式,在 .env 中修改一下下面两个配置

APP_DEBUG=false
APP_ENV=production

第二个问题是因为php环境需要安装 xml 扩展(php-xml)。这样 php安装xml扩展

可能是我之前觉得这些扩展都是默认安装的,我再更新下文档。

Devnull6 commented 5 years ago

非常感谢! Debug模式修改正常,但由于之前注册账号使用了邮箱,现在再次注册会提示已经存在,如何清除已注册邮箱信息呢?注册用admin命名会有如下500的server error image image image

mylxsw commented 5 years ago

如果是刚安装好,还没有开始使用的话,可以直接执行SQL

  TRUNCATE wz_users

清空用户表就可以重新注册了,至于为什么会报错500,这个能麻烦提供一下错误日志(默认为storage/logs/laravel.log)不?

Devnull6 commented 5 years ago

log如下,请参考。 laravel.log

mylxsw commented 5 years ago

是因为php环境需要安装 xml 扩展(php-xml)。参考这里 php安装xml扩展

执行 php -m 命令应该可以看到这些已经安装的扩展

Devnull6 commented 5 years ago

这几个也确实都有。 image image

mylxsw commented 5 years ago

这可真的把我难到了,不符合常理啊,再执行下 php --re dom | grep class 命令,把输出发出来看看

$ php --re dom | grep class
    Class [ <internal:dom> final class DOMException extends Exception implements Throwable ] {
    Class [ <internal:dom> class DOMStringList ] {
    Class [ <internal:dom> class DOMNameList ] {
    Class [ <internal:dom> class DOMImplementationList ] {
    Class [ <internal:dom> class DOMImplementationSource ] {
    Class [ <internal:dom> class DOMImplementation ] {
    Class [ <internal:dom> class DOMNode ] {
    Class [ <internal:dom> class DOMNameSpaceNode ] {
    Class [ <internal:dom> class DOMDocumentFragment extends DOMNode ] {
    Class [ <internal:dom> class DOMDocument extends DOMNode ] {
    Class [ <internal:dom> <iterateable> class DOMNodeList implements Traversable, Countable ] {
    Class [ <internal:dom> <iterateable> class DOMNamedNodeMap implements Traversable, Countable ] {
    Class [ <internal:dom> class DOMCharacterData extends DOMNode ] {
    Class [ <internal:dom> class DOMAttr extends DOMNode ] {
    Class [ <internal:dom> class DOMElement extends DOMNode ] {
    Class [ <internal:dom> class DOMText extends DOMCharacterData ] {
    Class [ <internal:dom> class DOMComment extends DOMCharacterData ] {
    Class [ <internal:dom> class DOMTypeinfo ] {
    Class [ <internal:dom> class DOMUserDataHandler ] {
    Class [ <internal:dom> class DOMDomError ] {
    Class [ <internal:dom> class DOMErrorHandler ] {
    Class [ <internal:dom> class DOMLocator ] {
    Class [ <internal:dom> class DOMConfiguration ] {
    Class [ <internal:dom> class DOMCdataSection extends DOMText ] {
    Class [ <internal:dom> class DOMDocumentType extends DOMNode ] {
    Class [ <internal:dom> class DOMNotation extends DOMNode ] {
    Class [ <internal:dom> class DOMEntity extends DOMNode ] {
    Class [ <internal:dom> class DOMEntityReference extends DOMNode ] {
    Class [ <internal:dom> class DOMProcessingInstruction extends DOMNode ] {
    Class [ <internal:dom> class DOMStringExtend ] {
    Class [ <internal:dom> class DOMXPath ] {

这是我这边的输出,可以看到,里面有一个 DOMDocument

Devnull6 commented 5 years ago

我也满腹疑窦呢,多探讨

php --re dom | grep class

Class [ final class DOMException extends Exception implements Throwable ] { Class [ class DOMStringList ] { Class [ class DOMNameList ] { Class [ class DOMImplementationList ] { Class [ class DOMImplementationSource ] { Class [ class DOMImplementation ] { Class [ class DOMNode ] { Class [ class DOMNameSpaceNode ] { Class [ class DOMDocumentFragment extends DOMNode ] { Class [ class DOMDocument extends DOMNode ] { Class [ class DOMNodeList implements Traversable, Countable ] { Class [ class DOMNamedNodeMap implements Traversable, Countable ] { Class [ class DOMCharacterData extends DOMNode ] { Class [ class DOMAttr extends DOMNode ] { Class [ class DOMElement extends DOMNode ] { Class [ class DOMText extends DOMCharacterData ] { Class [ class DOMComment extends DOMCharacterData ] { Class [ class DOMTypeinfo ] { Class [ class DOMUserDataHandler ] { Class [ class DOMDomError ] { Class [ class DOMErrorHandler ] { Class [ class DOMLocator ] { Class [ class DOMConfiguration ] { Class [ class DOMCdataSection extends DOMText ] { Class [ class DOMDocumentType extends DOMNode ] { Class [ class DOMNotation extends DOMNode ] { Class [ class DOMEntity extends DOMNode ] { Class [ class DOMEntityReference extends DOMNode ] { Class [ class DOMProcessingInstruction extends DOMNode ] { Class [ class DOMStringExtend ] { Class [ class DOMXPath ] {

mylxsw commented 5 years ago

这样看来环境也没啥问题了,那就确认一下这几点

Devnull6 commented 5 years ago

php-fpm重启过,系统也重启过,php-fpm、mariadb、nginx都是同一台机器,不知道啥情况了呢

Devnull6 commented 5 years ago

这样看来环境也没啥问题了,那就确认一下这几点

  • 安装扩展之后,php-fpm是否重启了?
  • 应用的nginx配置中,指定的php环境是否和执行命令行时用的是同一个环境?

能否在数据库直接创建管理账号,然后测试看看登录以及用户管理?

mylxsw commented 5 years ago

可以的,你可以把用户激活给关了,直接创建帐号就好了

在.env文件中

WIZARD_NEED_ACTIVATE=false
Devnull6 commented 5 years ago

可以的,你可以把用户激活给关了,直接创建帐号就好了

在.env文件中

WIZARD_NEED_ACTIVATE=false

麻烦您提供下具体的创建命令,感谢!

mylxsw commented 5 years ago

这样吧,你在.env文件中,把这个配置项加上

WIZARD_NEED_ACTIVATE=false

数据库中把用户表数据清空一下,重新从页面上注册就可以了

Devnull6 commented 5 years ago

这样吧,你在.env文件中,把这个配置项加上

WIZARD_NEED_ACTIVATE=false

数据库中把用户表数据清空一下,重新从页面上注册就可以了

邮件激活false后,成功注册,感觉是这边.env邮件没有配置的原因呢 image

image

urmyfaith commented 5 years ago

php artisan migrate


In Connection.php line 664:

SQLSTATE[HY000] [2002] Connection refused (SQL: select * from information_schema.tables where table_schema = wizard_2 and table_name = migrations and table_type = 'BASE TABLE')

In PDOConnection.php line 31:

SQLSTATE[HY000] [2002] Connection refused

In PDOConnection.php line 27:

SQLSTATE[HY000] [2002] Connection refused

mylxsw commented 5 years ago

php artisan migrate

  • Application In Production!     *

Do you really wish to run this command? (yes/no) [no]:

yes

In Connection.php line 664:

SQLSTATE[HY000] [2002] Connection refused (SQL: select * from information_schema.tables where table_schema = wizard_2 and table_name = migrations and table_type = 'BASE TABLE')

In PDOConnection.php line 31:

SQLSTATE[HY000] [2002] Connection refused

In PDOConnection.php line 27:

SQLSTATE[HY000] [2002] Connection refused

你得改一下数据库的连接配置啊,改成你数据库的链接信息,还有需要提前创建好数据库。

number44s commented 5 years ago

数据库迁移问题 容器构建后 1 2数据库配置有什么问题吗 3本机可以远程访问到虚拟机的mysql 但是虚拟机本地反而被拒绝