易栈网-膘叔

浏览模式: 标准 | 列表 | 图文
expect: spawn id exp3 not open

expect: spawn id exp3 not open

在尝试使用 envoy 尝试自动部署的时候,遇到了问题,即:如果我要自己创建一个新的域名,那只能上线去执行 lnmp vhost add 的命令。

为什么要使用 lnmp 呢?其实他对我的作用只有一个,多版本的 PHP。因为现在在线上,各种不同版本的 PHP 都在跑,有 PHP5.6 / PHP7.1 / PHP8.1估计后面还会有更多的版本。
于是,我就想着用 expect 来处理

sudo /usr/bin/expect<<EOF
spawn lnmp vhost add
expect {
"Please enter domain" {send "{{$host}}\n";exp_continue}
"Enter more domain name" {send "\n";exp_continue}
"Please enter the directory" {send "\n";exp_continue}
"Allow Rewrite rule" {send "y\n";exp_continue}
"Default rewrite" {send "laravel\n";exp_continue}
"Enable PHP Pathinfo" {send "\n";exp_continue}
"Allow access log" {send "\n";exp_continue}
"Enable IPv6" {send "\n";exp_continue}
"Enter your choice " {send "\n";exp_continue}
"Add SSL Certificate" {send "\n";exp_continue}
"Press any key to start" {send "\r"; exp_continue}
}
expect eof
EOF
但执行后一直报错:
[mpass]: expect: spawn id exp3 not open
[mpass]: while executing
[mpass]: "expect eof"
仔细查了半天,原来最后一句还用了 exp_continue。。expect 认为还没有执行完。所以。就行报错了。
将最后一个 exp_contiue 删除。再次执行,就正常了
@task('lnmp' ,['on'=>'dev'])

@if($force)
sudo rm -rf /usr/local/nginx/conf/vhost/{{$host}}.conf
sudo rm -rf /home/wwwroot/{{$host}}
@endif
sudo /usr/bin/expect<<EOF
spawn lnmp vhost add
expect {
"Please enter domain" {send "{{$host}}\n";exp_continue}
"Enter more domain name" {send "\n";exp_continue}
"Please enter the directory" {send "\n";exp_continue}
"Allow Rewrite rule" {send "y\n";exp_continue}
"Default rewrite" {send "laravel\n";exp_continue}
"Enable PHP Pathinfo" {send "\n";exp_continue}
"Allow access log" {send "\n";exp_continue}
"Enable IPv6" {send "\n";exp_continue}
"Enter your choice " {send "\n";exp_continue}
"Add SSL Certificate" {send "\n";exp_continue}
"Press any key to start" {send "\r";}
}
expect eof
EOF
ls -lah /home/wwwroot/
@endtask
这样就 OK 了
10月回顾一下

10月回顾一下

之前本来有准备写内容,但不知道 怎么回事编辑器加载不出来直接报错,于是就放弃了。

10月没做什么事情,但大致流水账可以记一下:
1、Flutter 又重捡起来了,后面重心可能会在这一块 (安装个开发工具折腾了1天,主要是SDK更新,一更就死)
2、小程序 还在写,但下一波估计不用 UniAPP,可能会考虑Taro。
3、升级了操作系统到最新的,目前 没问题
4、又买了两台无忧。好象Zerotier会影响网速?准备重建一下planet。估计又要大折腾
新项目还是要上,老本没地儿吃了
phpstorm/webstorm中如何识别 vite 项目的@

phpstorm/webstorm中如何识别 vite 项目的@

在使用 phpstorm/webstorm 进行前端开发的时候,一般会设置 alias,比如@,但在 IDEA 中,如果项目是 vite/vuejs 的时候 ,无法识别路径。

网上教程很多,什么设置.eslintrc.js / jsconfig.json / tsconfig.json 之类的,但其实重启 IDE 后仍然无法识别。
查了一下资料,原来目前 phpstorm 对@的 alias,只支持 webpack,也就是说,如果你的前端项目是 webpack 的,其实是能够识别的。因此,只要在项目根目录下,随便建一个文件,尽量不要叫 webpack.config.js,以防被项目自动识别。你可以建一个 alias.config.js,内容如下:
const path = require("path");
module.exports = {
resolve: {
alias: {
'@': path.resolve(__dirname, 'resources/js'),
'~': path.resolve(__dirname, 'resources')
}
}
}
看到这个 resource/js 就知道当前是在 laravel 项目下面了。
在 Ide 的 setting中 :
Languaes & Frameworks > Javascript > Webpack ,选择手动,指定 alias.config.js ,确定后,再打开 *.vue 文件,会发现原来的 import 文件都能够自动识别了。
tailwindCss与 elementUI 的冲突解决

tailwindCss与 elementUI 的冲突解决

解决 tailwindCss 与 elementUI 最简单办法就是

1、在 app.js(或main.js)中,先加载 tailwindCss 再加载 elementUI 和相关 css
2、在 tailwind.config.js 中,plugins节点下,增加:
plugin(function ({addBase}) {
addBase({
".el-button": {
"background-color": "var(--el-button-bg-color,val(--el-color-white))"
}
})
}),
说白了,就是继续针对 el-button 重新赋值。
再打开页面就完全正常了。
我一直认为已经没用的laravel-ide-helper还在更新

我一直认为已经没用的laravel-ide-helper还在更新

如题,真没想到barryvdh/laravel-ide-helper还在更新。毕竟现在phpStorm已经功能这么强大了,我想它应该是没有用了吧!结果在看到LaravelQuery的插件时,提到了它,同时提到的还有LaravelIdea。毕竟 LaravelIdea是要钱的。还挺贵。所以又composer require了一下barryvdh/laravel-ide-helper。

然后php artisan ide-helper:model,发现他把scopeFilter这样的方法加进注释啦,这个确实挺方便。不然每次我都 要自己在写了scope方法后,还得主动到注释里加上。否则 IDE会认不出 filter()后的方法。
例如:
function scopeIsActive($query ){
$query->where('status','=','active');
}
在用的时候 Model::query()->isActive()->get(); 写到 isActive()后,后面的方法都认不出来。
因此,在这时候 只能在Model类里加入
/**
* @method static \Illuminate\Database\Eloquent\Builder|ModelName isActive()
*/
当然不是不能写,只是每次这么写就有点累罢了
其他的生成对 phpstorm来说感觉用处没有那么大,当然如果你象官方那样进行扩展的话,倒也不是不可以。
belongsToMany的备份

belongsToMany的备份

纯备份,长时间不用的时候 直接就忘了

class Shop{
/**
* 员工
* @return \Illuminate\Database\Eloquent\Relations\BelongsToMany
*/
public function staffs()
{
// 1、目标类 UnionUser,
// 2、中间表的表名 pivot: union_user_store,
// 3、中间表对应当前表的字段 :shopcode ,
// 4、中间表对应目标类的字段 usercode
// 当关联不是ID时,需要有5、6参数
// 5、当前类对应 3的字段 (code -> 3:shopcode)
// 6、目标类对应4的字段 (usercode -> 4:usercode )
return $this->belongsToMany(UnionUser::class, UnionUserStore::getTable(), 'shopcode', 'usercode', 'code', UnionUser::USERCODE);
}
}
---EOF--
ElementUI的form校验的number

ElementUI的form校验的number

一般而言,elementUI的prop+rules可以用来对字段进行校验。大多数情况下感觉都没什么问题,毕竟官方的例子摆在那里。element-plus的例子没有的,element-ui2的例子也比较全。

但element-plus和elementui中都 没有对number类型进行介绍,如果直接{type:'number',....} 不管你填入什么值 ,都会报错,即使你用el-input+type="number",效果仍然一样
这是因为vue对所有的input默认都是当成string来解析的,因此你对一个string判断number,肯定就是失败的
网上80%的例子都是说采用:v-model.number="form.xxx" 来处理,确实,这样处理是OK的,但你会发现一个很严重的问题,那就是能输入的内容都是integer了。没法有小数点
这时候其实还是可以看element-plus所使用的async-validator的官方例子,因为黑夜的象{required:true},{type:"array"}等,都是来自于async-validator的官方支持,而官方是支持type="number"的。现在剩下的其实就是将el-input中的内容转为Number进行判断。仅此而已
官方的例子中有transform,这是一个钩子函数,用于验证前将数据进行简单的转换,比如我们就可以{type:"number",transform: Number},如果不能转成Number,其实也就失败了
---
临时写的,就先这样,后续有机会慢慢写的更详细一点,也或许就不再写了
参考:
1、https://github.com/yiminghe/async-validator
2、https://www.cnblogs.com/alabo1999/p/14990310.html (正好找到这一篇足够详细,估计我也不会再多写了)
小型 vue2项目快速升级到 Vue3的小踩坑

小型 vue2项目快速升级到 Vue3的小踩坑

1、参考官方文档,将一些不用的 filters ,等去掉

2、将原来的全局变量挂载,尽量去掉,用的时候 再加载好了,现代 IDE 基本上都会在你用的时候 自动加载进来
3、如果不使用 compositionAPI,基本上就是原来的代码不变
4、layout 写在 router 里比写在页面里方便 (如果是基于 inertiaJS 的 laravel 项目,当我没说)
5、用了 vite 后,原来的 process.env,要使用 import.meta.env来获取,import.meta.env,只认 VITE_开头的变量
6、用 autoImport/unplugin 后确实方便很多,但如果用了 element-plus 又用了 tailwindcss,要注意引入的顺序,否则象 button 上的样式可能会被覆盖
记录:小米蓝牙遥控器如何连接

记录:小米蓝牙遥控器如何连接

搬家的时候,投影的遥控器找不到了。突然翻到一个小米盒子的遥控器,想着应该能用吧,却连接不上。google 了一下,原来只要按住:首页+菜单,20秒左右,听到设备嘟的响起就完事了。

连接上后确实方便了不少,原来只能用米家控制。。。没有反馈,老是误触