Write the Code. Change the World.

9月 16

想做

  1. 配置,设置。比如大小,快捷键等。

  2. 主题色,配色。

  3. 支持 sz/rz,上传下载。

做好上边这几个,已经很完美了。不想再弄更多更多。脑袋只有那么大。

参考操作

https://blog.csdn.net/qianghaohao/article/details/79440961

https://www.jianshu.com/p/10ba12d55a49

https://sspai.com/post/53008

https://github.com/xfanwu/oh-my-zsh-custom-xxf

https://www.jianshu.com/p/6ac5ad8ebf98

https://github.com/aikuyun/iterm2-zmodem

阅读全文 >>

9月 12

这里的关键点:
1. redis 异步队列。
2. 多项目。

面对上边这种情况,怎么处理呢。如果不处理又会出现什么现象呢。

因为我们使用 supervisord 进行常驻队列侦听。如果不指定对应的 queue,多项目就会出现串的情况。这个是就可以用 queue 来处理该问题了。

处理

  1. 修改 supervisord 的配置文件。在 command 中指定一个 queue 。如
command=/alidata/service/php/bin/php /alidata/www/www.mlxiu.com/artisan queue:work redis --queue=test --sleep=3 --tries=3
  1. 在项目中,指定 queue。因为使用的是 laravel 框架。 队列继承 ShouldQueue。 可以在构造函数中指定 queue 即可。
public function __construct($id)
{
     $queueName = config('queue.name');
     if ($queueName) {
         $this->onQueue($queueName);
     }
}

queue.name 是自己额外在 queue.config 中添加的变量。

参考

https://www.cnblogs.com/zgxblog/p/10996112.html

阅读全文 >>

9月 06

layer.open 弹出一个对象,有时候会遇到高度自适应的问题。该怎么处理呢。文档虽然说明了怎么做,也的确是高度随着对象的变化,高度也变化了。但是弹层并没有对位置自适应。也就是没居中。其实在对象变化后,手动调用一次 $(window).resize(); 即可。

操作

  1. layer.open 的时候,area 只设置一个宽度值,或设置成 auto
  2. 弹出对象变化的时候,调用一次 $(window).resize();
layer.open({
    ……,
    area: '720px',
    ……
});

# 千万不要下边这种
layer.open({
    ……,
    area: ['720px'],
    ……
});

# 虽然 area 设置成数组形式表示的是宽高。一个值时就是宽。但是只设置一个值时和上边的非数组形式不一样。也就是不会出现自适应。

layer.open({
    ……,
    area: ['720px', '450px'],
    ……
});

就这么一点点了。

阅读全文 >>

8月 31

layui 有第三方比较好的三级联动,多级联动插件。但有时候,因为特殊要求,满足不了需要。这个时候就需要修改源码了。

先看插件文档以及实例。

https://fly.layui.com/extend/selectN,selectM/#doc

https://moretop.gitee.io/layui-select-ext/

特殊需要

1,需要回调。虽然不需要回调 form 提交一样可以拿到数据。可有时候前端就是需要有回调,需要看到具体的变化。这个时候就得改源码了。

2,删除对象时候,需要 confirm 确定后,才能删除。

修改

selectN 三级联动全只读。在初始化的时候,删除 select dom 即可。当然,也需要从 config 中添加配置,读配置。

//只读删除 select 组件,删除图标
if (c.allRead) {
    $E.find('.layui-anim').remove();
    $E.find('.layui-edge').remove();    
    $E.find('input').attr("readonly", true);
}

selectM 回调。在 config 中配置回调函数,并在初始化的时候指定好回调函数。在数据变化的时候,判断下是否有回调函数。存在就回调过去。

if (c.change && typeof c.change === "function" && typeof c.change.nodeType !== "number") {
        c.change(values);
}

selectM 删除确定。同样在 config 中配置变量,默认不需要确定。初始化的时候配置好即可。当需要删除对象的时候,先看是否存在需要确认的变量。不需要则直接删除。需要则先弹出 confirm 框,看操作。

$E.on('click','a i',function(e){
    this.delete = function() {
        var _this = $(this).prev('span');
        var v = _this.attr('lay-value');
        if(v){
            var _dd = $(c.elem).find('dd[lay-value='+v+']');
            _dd.removeClass('layui-this');
            _dd.find('.layui-form-checkbox').removeClass('layui-form-checked');
        }
        o.setSelected();
        _this.parent().remove();
        e.stopPropagation();
    };

    if (o && o.config && o.config.confirm) {
        layer.confirm('您确定要删除该选项?', {btn:['确定']}, (index) =>{
            this.delete();
            layer.close(index);
        });
        return;
    }
    this.delete();
});

阅读全文 >>

8月 28

虽然 Larave Auth 包含了验证邮箱以及密码的功能,但终归是固定样式的。想要更美观,更漂亮的验证功能,就得自定义。

自定义最直接的方法,就是重写发送逻辑。先贴出部分代码,然后读下边的文章,你肯定会做到的。


# App\Models\User; //发送验证邮箱 // verification.verify 是你自定义的邮箱模板 public function sendEmailVerificationNotification() { \Illuminate\Auth\Notifications\VerifyEmail::toMailUsing(function ($notifiable) { $url = \Illuminate\Support\Facades\URL::temporarySignedRoute( 'verification.verify', now()->addMinutes(60), ['id' => $notifiable->getKey()]); $email = $this->email; $nickname = $this->nickname; $body = sprintf('<a href="%s" target="_blank">点击激活邮箱</a>', $url); $mail = (new \Illuminate\Notifications\Messages\MailMessage)->view('emails.activateMail', ['nickname' => $nickname, 'url' => $url], function (Message $message) use ($nickname, $email, $body) { $message->subject('请激活你的邮箱'); $message->getSwiftMessage()->setBody($body); $message->to($email, $nickname); } ); return $mail; }); $this->notify(new \Illuminate\Auth\Notifications\VerifyEmail); }

当然,你可以使用 trait 干净处理,还可以使用事件另外解耦,还可以添加队列进行异步处理。

参考文章

https://www.jianshu.com/p/38e1426edf58

https://laravelacademy.org/post/19497.html

阅读全文 >>

8月 22

主服务器操作步骤

做主从复制最重要的一点就是双方的server-id不能相同;然而在主服务器上只需要三步:
1. 是改server-id
2. 启用二进制日志
3. 创建有复制权限的帐号

vim /etc/my.conf

# 修改下边两项, 保存退出
log-bin=/alidata/service/mariadb/binlogs/master-bin
server-id = 1

:wq

# 创建目录
mkdir /alidata/service/mariadb/binlogs

# 设置用户组(先查看用户组)
grep mysql /etc/group
groups mysql

chown -R mysql.mysql /alidata/service/mariadb/binlogs

重启 mysql ,设置权限


# 重启 mysql service mysqld restart # 进入 mysql,设置权限,生效 mysql -u root -p GRANT REPLICATION SLAVE,REPLICATION CLIENT ON *.* TO 'wangfang'@'xxx.xxx.xxx.105' IDENTIFIED BY '!Wfxxxxxxxxxx'; FLUSH PRIVILEGES;

再来配置从服务器配置。

从服务器操作步骤

编辑配置文件

vim /etc/my.conf

# 打开二进制文件 (从服务器可以不用打开)
# 二进制日志目录
log-bin=/tencent/service/mariadb/binlogs/master-bin
# 更改一个和主服务器不通的 id
server-id = 2
# 中继日志
relay-log =/tencent/service/mariadb/relaylogs/relay-bin 

:wq 保存退出

创建文件夹,并设置用户组

mkdir /tencent/service/mariadb/binlogs/

mkdir /tencent/service/mariadb/relaylogs/

chown -R mysql.mysql /tencent/service/mariadb/binlogs/

chown -R mysql.mysql /tencent/service/mariadb/relaylogs/

# 重启
service mysqld restart

登入 mysql 查看中继日志是否启动中

mysql -u xxxx -p 

# 查看中继日志是否启动
SHOW GLOBAL VARIABLES LIKE '%relay%';

# 出现 relay_log 项对应的文件就表示启动了。

配置从服务器连接主服务器相关

  • MASTER_HOST=’xxxxxxx’ –主服务器的IP地址
  • MASTER_USER=’xxxx’ –主服务器上授权复制的用户名
  • MASTER_PASSWORD=’xxxx’ –主服务器上授权用名的密码
  • MASTER_LOG_FILE=’mysql-bin.000006′ –主服务器上的日志文件
  • MASTER_LOG_POS=245 –主服务器上日志文件的位置
# 先在主服务器上查询
show master status;

+-------------------+----------+--------------+------------------+
| File              | Position | Binlog_Do_DB | Binlog_Ignore_DB |
+-------------------+----------+--------------+------------------+
| master-bin.000001 |    93207 |              |                  |
+-------------------+----------+--------------+------------------+

这儿只需要看 File 和 Position,其它的两个分别是白名单和黑名单,意思为同步哪几个数据库和不同步哪几个数据库,可自行根据需求进行设置。记录了前两个字段后,在从库上执行以下语句。

# 从服务器上执行
CHANGE MASTER TO MASTER_HOST='xxxxxxx',MASTER_USER='xxxxxxx',MASTER_PASSWORD='xxxxxxx',MASTER_LOG_FILE='master-bin.000001',MASTER_LOG_POS=93207;

但是此时的从服务器还没有工作起来,要使从服务器工作起来还要手动启动复制线程,我们上面的步骤写得很明白。

# 从数据库
START SLAVE;

oo

从服务器还得自己建立数据库吗。

主服务器重启了,从服务器从新配置

主服务器操作

# 查看 File Position
show master status;

从服务器操作

stop slave

# 再执行 CHANGE

# 再 start
start slave

参考

https://www.cnblogs.com/xiaocen/p/3702945.html

https://www.cnblogs.com/gspsuccess/p/9182545.html?utm_source=debugrun&utm_medium=referral

https://blog.csdn.net/justlpf/article/details/82908740

http://blog.itpub.net/30221425/viewspace-2637246/

阅读全文 >>