探索linux踩过的坑

1,154 阅读3分钟

1, 注意组件化的成本,有些不必要的组件化可以省略

2,组件间通信

注意一定要把ajax获取数据放在page层,给自己定一个规范,以后采用provide inject形式 最外层所有的 数据,方法,等一切需要命名的,全部以pro开头,小驼峰命名, 在使用时,调用pro的方法,只是为了获取数据,所有的参数处理,以及后续操作,都经过本组件内指定,

在考虑到子组件间通信时,例如弹窗,或者获取相机树数据等,弹窗的显隐由 父组件的状态控制,不需要传值,直接由父组件控制 (如pro.isShowDetail)

注入时如下

// A.vue
export default {
  provide: {
    pro: this
  },
  data() {
      return {
          a: 123,
          someData: [],
          uData: [],
      }
  },
  methods: {
      getData(parmas, fn) {
          Api.getData(parmas).then((res) => {
             fn(res);
          });
      },
      getFixedData() {
        Api.getFixedData().then((res) => {
            if (res.code === 0) {
                this.someData = res.data;
            }
        })  
      },
  },
  created() {
      this.getFixedData();
      this.getData({ pageNo: 1,pageSize: 20 }, () => {
          if (res.code === 0) {
            this.uData = res.data;
          }
      });
  },
}

// B.vue
export default {
  inject: ['pro'],
  mounted () {
    console.log(this.pro.a);  // 123
  }
}

注入时,过滤器是无法注入的。需要过滤器的地方统一再modules下建立 [name].mixin.js 放在这里面, 然后在需要的地方引入 如

// deviceRegion.mixin.js
export default {
    filters: {
        changeMeta(a) {
            return `${a}`;
        }
    }
};

3,linux 服务,千万别写死循环,如果写了,马上中止,并重启相关服务

此处感谢李鑫大佬

ps -ef |grep sunjinxiang|grep -v grep|awk '{print $2}'|xargs kill -9

4,linux-gitlab-runner

job刚开始结果遇到如下报错

Running with gitlab-runner 11.3.1 (0aa5179e)
  on my-shell 9ad02d52
Using Shell executor...
Running on template...
Fetching changes...
rm: cannot remove '.git/hooks/post-checkout': Permission denied
ERROR: Job failed: exit status 1

解决方法 (治标)

找到这个地方
/home/gitlab-runner/builds/9ad02d52/0/sunjinxiang/test-CI-CD/.git/hooks
然后 cd /home/gitlab-runner/builds/9ad02d52/0
然后执行  rm -rf sunjinxiang
问题就这么解决了。为什么我不知道
网上的解决方案也不知道原因
治标不治本。又出现了。

解决方法 (治本)

ls -alh // 这个命令可以查看所有者和组等等
sudo chown -R gitlab-runner:gitlab-runner ./gitlab-runner/   // 这个命令改变了这个文件夹的归属

5,linux shell 脚本 在写变量时,等号跟变量不要分开, 如果分开,会把RETEXT当成命令执行

#!/usr/bin/env bash
RETEXT=`curl -X GET \
  'https://git-v.megvii-inc.com/api/v4/projects/943/pipelines?ref=master&scope=branches' \
  -H 'cache-control: no-cache' \
  -H 'postman-token: f640649b-b763-d506-afbe-84220b3375f9' \
  -H 'private-token: njVo6qWdNrW4kXcTVzz5'`

echo ----------
echo $RETEXT
echo ----------

6,linux shell 中"2>&1"含义

参考资料

为何2>&1要写在后面?
      command > file 2>&1 
      首先是command > file将标准输出重定向到file中, 2>&1 是标准错误拷贝了标准输出的行为,也就是同样被重定向到file中,最终结果就是标准输出和错误都被重定向到file中。 
      
ls 2>1测试一下,不会报没有2文件的错误,但会输出一个空的文件1;
    ls xxx 2>1测试,没有xxx这个文件的错误输出到了1中;
    ls xxx 2>&1测试,不会生成1这个文件了,不过错误跑到标准输出了;
    ls xxx >out.txt 2>&1, 实际上可换成 ls xxx 1>out.txt 2>&1;重定向符号>默认是1,错误和输出都传到out.txt了。

7,git remote: HTTP Basic: Access denied 错误

问题描述: 
git push 报 HTTP Basic: Access denied 错误 
解决方案: 
1. 如果账号密码有变动 用这个命令 git config --system --unset credential.helper 重新输入账号密码 应该就能解决了 
2. 如果用了第一个命令 还不能解决问题那么 用这个命令: 
git config --global http.emptyAuth true
 然后继续用第一个命令
解决方案: 
1. 如果账号密码有变动 用这个命令 git config --system --unset credential.helper 重新输入账号密码 应该就能解决了 
2. 如果用了第一个命令 还不能解决问题那么 用这个命令: 
git config --global http.emptyAuth true
3.如果以上两个方法不起作用,那么采用以下方法:

进入控制面板》用户账号》凭据管理器?windows凭据》普通凭据,在里面找到git,点开编辑密码,更新为最新密码之后就可以正常操作了。