记一个困扰我 2 天的问题——rsync 命令 作者: Chuwen 时间: 2022-12-28 分类: Linux 评论 最近在忙着迁移服务器,流水线脚本没改,只是换了服务器,结果新服务器 `rsync` 有问题,不遵从 `--exclude=` 规则,导致 `.env` 文件被删除 但是手动拿出执行又是正常的 ## 服务器信息 **旧服务器**(使用*原脚本*运行正常) ```shell 18:30:41 root@shine-prod ~ lsb_release -a LSB Version: :core-4.1-amd64:core-4.1-noarch Distributor ID: CentOS Description: CentOS Linux release 8.5.2111 Release: 8.5.2111 Codename: n/a 18:30:43 root@shine-prod ~ rsync --version rsync version 3.1.3 protocol version 31 Copyright (C) 1996-2018 by Andrew Tridgell, Wayne Davison, and others. Web site: http://rsync.samba.org/ Capabilities: 64-bit files, 64-bit inums, 64-bit timestamps, 64-bit long ints, socketpairs, hardlinks, symlinks, IPv6, batchfiles, inplace, append, ACLs, xattrs, iconv, symtimes, prealloc rsync comes with ABSOLUTELY NO WARRANTY. This is free software, and you are welcome to redistribute it under certain conditions. See the GNU General Public Licence for details. ``` **新服务器**(使用*原脚本*运行错误) ```shell root@shine-prod-1:~# lsb_release -a LSB Version: security-11.1.0ubuntu4-noarch Distributor ID: Ubuntu Description: Ubuntu 22.04.1 LTS Release: 22.04 Codename: jammy root@shine-prod-1:~# rsync --version rsync version 3.2.3 protocol version 31 Copyright (C) 1996-2020 by Andrew Tridgell, Wayne Davison, and others. Web site: https://rsync.samba.org/ Capabilities: 64-bit files, 64-bit inums, 64-bit timestamps, 64-bit long ints, socketpairs, hardlinks, hardlink-specials, symlinks, IPv6, atimes, batchfiles, inplace, append, ACLs, xattrs, optional protect-args, iconv, symtimes, prealloc, stop-at, no crtimes Optimizations: SIMD, no asm, openssl-crypto Checksum list: xxh128 xxh3 xxh64 (xxhash) md5 md4 none Compress list: zstd lz4 zlibx zlib none rsync comes with ABSOLUTELY NO WARRANTY. This is free software, and you are welcome to redistribute it under certain conditions. See the GNU General Public Licence for details. ``` ## 原脚本 注意看以下脚本中 `--exclude={'.git','.idea','storage','node_modules','.env','shell','docker-compose.yaml'}` 部分,这个如果是通过阿里云流水线-主机部署执行这条命令,不会起作用,但是你手动去执行又是正常的 导致把你的 `.env` 文件给删了,然后后置脚本就运行失败了 *就是因为这个把我折腾死的烦躁、怀疑人生* ```shell rm -rf $TMP_DEPLOY_PATH mkdir -p $TMP_DEPLOY_PATH mkdir -p $ES_STAGING_PATH tar zxvf "$package_download_path" -C "$TMP_DEPLOY_PATH" EXCLUDE_COMPOSER_ARG=$([ "$ES_UPDATE_COMPOSER" = "true" ] && echo "" || echo --exclude="vendor") ####### 预发布环境部署 rsync -zarp --delete \ --exclude={'.git','.idea','storage','node_modules','.env','shell','docker-compose.yaml'} \ $EXCLUDE_COMPOSER_ARG \ $TMP_DEPLOY_PATH $DEPLOY_STAGING_PATH cd $DEPLOY_STAGING_PATH || exit docker-compose exec app sh deploy/laravels.sh ``` ## 解决方案-现脚本 一次偶然的尝试,改成 `--exclude=".env"` ... 这样一个一个加上,发现脚本正常运行,达到我预期效果,`.env` 终于不会被删除了!!! ```shell rm -rf $TMP_DEPLOY_PATH mkdir -p $TMP_DEPLOY_PATH mkdir -p $ES_STAGING_PATH tar zxvf "$package_download_path" -C "$TMP_DEPLOY_PATH" >>/dev/null EXCLUDE_COMPOSER_ARG=$([ "$ES_UPDATE_COMPOSER" = "true" ] && echo "" || echo --exclude="vendor") #### 预发布环境部署 rsync -zarp --delete \ --exclude=".git" --exclude=".idea" --exclude=".env" \ --exclude="storage" --exclude="node_modules" --exclude="shell" \ --exclude="docker-compose.yaml" $EXCLUDE_COMPOSER_ARG \ $TMP_DEPLOY_PATH $DEPLOY_STAGING_PATH cd $DEPLOY_STAGING_PATH || exit docker compose exec -T app sh deploy/laravels.sh ``` --- 具体原因还未找到,等找到原因再更新文章
Shopify Partner 使用 JS 一键创建店铺 作者: Chuwen 时间: 2022-12-28 分类: JavaScript 评论 # Shopify Partner 使用 JS 一键创建店铺 免去繁琐的操作步骤 ### 第 1 步 打开 https://partners.shopify.com/organizations > 如果没有登录需要先登录 ### 第 2 步 打开浏览器**开发者工具**,以 Chrome 为例,按 F12 即可打开 ### 第 3 步 > 请注意修改代码的 `subdomain` 和 `storeName` 值 在**开发者工具**找到 `Console` Tab,然后粘贴以下代码,按 `Enter` 键运行即可 ### 第 4 步 等待大概 20s 左右,因为创建店铺需要比较长的时间,创建成功后,会自动打开你新创建的店铺 ```js var organizationID = window.RailsData.user.organizationID var subdomain = 'test-008' var storeName = subdomain.replaceAll("-", " ").toUpperCase() fetch(`https://partners.shopify.com/${organizationID}/api/graphql`, { headers: { 'content-type': 'application/json', 'x-csrf-token': document.querySelector(`meta[name="csrf-token"]`).content }, body: JSON.stringify({ operationName: "ShopCreate", variables: { input: { storeType: "PARTNER_TEST_STORE", developerPreviewHandle: "checkout_extensibility", storeName, address: { countryCode: 'US'// 国家 }, subdomain, signupSourceDetails: 'test_app_or_theme' } }, query: "mutation ShopCreate($input: ShopCreateInput!) {\n shopCreate(input: $input) {\n redirectUrl\n userErrors {\n field\n message\n __typename\n }\n __typename\n }\n}\n" }), method: 'POST', mode: 'cors', credentials: 'include' }) .then((response) => response.json()) .then((data) => { console.log('创建店铺成功!', data); window.open(data.shopifyCreate.redirectUrl, "_blank") }) .catch((error) => { console.error('创建店铺失败!', error); alert(`创建店铺失败!${error}`) }); ``` --- Gist: https://gist.github.com/PrintNow/067f1d494a2f723e1486d9527997942ca
Chrome 无法使用谷歌翻译(Google Translate)解决办法 作者: Chuwen 时间: 2022-12-16 分类: 神奇技巧 评论 ## 解决方案 ### 1. DNS 重写 将 `translate.googleapis.com` CNAME 解析到 `update.googleapis.com` 即可 使用如 AdGuard 进行 DNS 重写: ![](https://cdn.nowtime.cc/2022/12/16/3589390178.png) ### 2. 修改系统 hosts 文件 因为网上有许多资料讲怎么修改,这里不再赘述
读取 .env 环境变量文件,并使用 mysqldump 导出数据库 作者: Chuwen 时间: 2022-12-10 分类: 其他分类 评论 ## 代码 如果没有 mysqldump 可以使用此命令安装<仅限于 CentOS 系统> ```shell yum install -y holland-mysqldump.noarch ``` --- ```shell #!/bin/bsh function echo_error() { [ $# -ne 1 ] && return 0 echo -e "\033[31m $1 \033[0m" } function echo_danger() { [ $# -ne 1 ] && return 0 echo -e "\033[41;37m $1 \033[0m" } function echo_info() { [ $# -ne 1 ] && return 0 echo -e "\033[32m $1 \033[0m" } function echo_success() { [ $# -ne 1 ] && return 0 echo -e "\033[42;37m $1 \033[0m" } function echo_warning() { [ $# -ne 1 ] && return 0 echo -e "\033[33m $1 \033[0m" } function now_time() { echo $(date '+%Y-%m-%d %H:%M:%S') } if [ ! -f ".env" ]; then echo_danger ".env 不存在,终止执行" exit 127 fi # 将 .env 文件导入环境变量(排除注释行) export $(cat .env | grep -v "^#") # 导出每个表前 1000 条数据 function export_limit_1000() { mysqldump --column-statistics=0 \ --host="${DB_HOST}" \ --user="${DB_USERNAME}" --password="${DB_PASSWORD}" \ "${DB_DATABASE}" \ --where="true limit 1000" >mysqldump_"$(date '+%Y-%m-%d_%H:%M:%S')".sql } function export_sql() { echo_info "[`now_time`] >>> 开始导出数据库" mysqldump --column-statistics=0 \ --host="${DB_HOST}" \ --user="${DB_USERNAME}" --password="${DB_PASSWORD}" \ "${DB_DATABASE}" \ >mysqldump_"$(date '+%Y-%m-%d_%H:%M:%S')".sql echo_success "[`now_time`] <<< 导出数据库完成" } export_sql ``` ## 执行结果 ![](https://cdn.nowtime.cc/2022/12/10/3529888146.png)
Shell 输出有颜色文本并封装成函数 作者: Chuwen 时间: 2022-12-10 分类: Linux 评论 ```shell #!/bin/bash # 输出红字 function echo_error() { [ $# -ne 1 ] && return 0 echo -e "\033[31m $1 \033[0m" } # 输出红底白字 function echo_danger() { [ $# -ne 1 ] && return 0 echo -e "\033[41;37m $1 \033[0m" } # 输出绿字 function echo_info() { [ $# -ne 1 ] && return 0 echo -e "\033[32m $1 \033[0m" } # 输出绿底白字 function echo_success() { [ $# -ne 1 ] && return 0 echo -e "\033[42;37m $1 \033[0m" } # 输出黄字 function echo_warning() { [ $# -ne 1 ] && return 0 echo -e "\033[33m $1 \033[0m" } ``` ## 运行结果截图 ```shell echo_error "输出红字" echo_danger "输出红底白字" echo_info "输出绿字" echo_success "输出绿底白字" echo_warning "输出黄字" ``` ![](https://cdn.nowtime.cc/2022/12/10/445780269.png) --- 通过 gist 查看:https://gist.github.com/PrintNow/a33da4cf74bb2f097deb00ac0dadd003