GithubHelp home page GithubHelp logo

jingxinxin / tiankeng Goto Github PK

View Code? Open in Web Editor NEW
2.0 2.0 0.0 10 KB

记录程序猿开发过程中已经遇到的各种坑,再记录解决方法 / Record the various pits that have been encountered during the development process, and then record the solution.

tiankeng fillpit linux javascript node mac windows

tiankeng's Introduction

FILL PIT

详情看 Issues   你有问题也可以提交到这里 热心的大神们也许能帮你填坑

完善中~

tiankeng's People

Contributors

jingxinxin avatar

Stargazers

 avatar  avatar

Watchers

 avatar  avatar

tiankeng's Issues

git无法pull仓库refusing to merge unrelated histories

当大量修改本地,或者完全两个不同的项目覆盖的时候,比如本地项目完全覆盖远端的项目
我只需要执行
git push --force
就会强制push当前的项目,包括log的记录也会被强制覆盖

当我们在另一个地址pull,因为两个仓库不同,发现refusing to merge unrelated histories,无法合并
因为他们是两个不同的项目,要把两个不同的项目合并,git需要添加一句代码,在git pull,这句代码是在git 2.9.2版本发生的,最新的版本需要添加--allow-unrelated-histories
假如我们的源是origin,分支是master,那么我们 需要这样写
git pull origin master --allow-unrelated-histories
但是有个问题是会发生冲突,如果你需要保留logs记录,你可以解决冲突,如果你完全不需要之前的项目记录,只需要
git fetch --all //只是下载代码到本地,不进行合并操作
git reset --hard origin/master //把HEAD指向最新下载的版本

没有https 需要免费的ssl怎么办

传送们 https://www.sslforfree.com/

另外附上阿里云的
第一、阿里云证书申请地址

阿里云证书服务:https://www.aliyun.com/product/cas

申请免费Symantec DV SSL证书,我们可以看到免费1年
申请过程看阿里云提示过程就不多说了
申请通过后从阿里云证书列表后台下载到证书包。
下载证书文件包之后,可以看到.pem和.key两个文件,这个我们需要绑定到网站配置中的。

Symantec DV SSL证书配置方法
Nginx环境配置

server {
listen 443;
server_name 网站域名;
ssl on;
...
ssl_certificate 证书文件路径.pem;
ssl_certificate_key 证书文件路径.key;
ssl_session_timeout 5m;
ssl_ciphers ECDHE-RSA-AES128-GCM-SHA256:ECDHE:ECDH:AES:HIGH:!NULL:!aNULL:!MD5:!ADH:!RC4;
ssl_protocols TLSv1 TLSv1.1 TLSv1.2;
ssl_prefer_server_ciphers on;
...
}

ssh 公钥认证报错:Permission denied (publickey,gssapi-keyex,gssapi-with-mic).

SSH对公钥、私钥的权限和所有权的要求是非常严格的,总结如下:
1、下面两个目录的所有权必须是user,所属组也应该是user,前者权限不能是777,后者权限必须为700
\home\user
\home\user.ssh
2、下面公钥文件的所有权必须是user,所属组也应该是user,权限必须为644
\home\user.ssh\authorized_keys
3、下面私钥文件的所有权必须是user,所属组也应该是user,权限必须是600
\home\user.ssh\id_rsa

有些用户將home目录权限设为777,提交并行任务出现下列错误:

Permission denied, please try again.^M
Permission denied, please try again.^M
Permission denied (publickey,gssapi-keyex,gssapi-with-mic,password).^M

解决方法
(1)创建用户: jack
(2)修改sshd_config文件

vi /etc/ssh/sshd_config //开启以下内容,一般默认即可

HostKey /etc/ssh/ssh_host_rsa_key
RSAAuthentication yes
PubkeyAuthentication yes
AuthorizedKeysFile .ssh/authorized_keys

/etc/init.d/sshd restart

(3)权限设置 //主要问题可能就出在这里,确保各个文件的权限正确

mkdir /home/jack/.ssh

chown -R hadoop:hadoop /home/hadoop

chmod 700 /home/jack

chmod 700 /home/jack/.ssh

chmod 644 /home/jack/.ssh/authorized_keys //公钥文件的所有权限

chmod 600 /home/jack/.ssh/id_rsa //私钥文件的所有权限

package-lock.json导致 npm包异常强大的缓存问题 : (

问题重现

有时候我们进行了npm upgrade操作后,由于更新后的第三包的兼容性的差异,出现编译报错不通过的问题。

以前我们可以git checkout package.json来还原package.json文件,再次执行npm i操作来覆盖包,返回之前的状态。

而现在因为有来package-lock.json 文件锁定和记录了node_modules文件夹的包结构和下载路径等信息。
从而导致无论你是手动修改package.json文件中包的版本号,还是rm -rf node_modules再执行npm i会直接给你无视掉package.json中修改的信息。shit~

那要不我们把package-lock.json 删掉吧
执行npm outdated你会绝望的发现,妈蛋还是最新的包状态。

解决方案

我目前是对照package.json的包版本,重新npm i [email protected] 指定版本号按照一下,但遇到大规模的变动,显得很蛋疼

如有大神有更好的方式,还望不吝赐教

mongod.service - SYSV: Mongo is a scalable, document-oriented database.

Loaded: loaded (/etc/rc.d/init.d/mongod; bad; vendor preset: disabled)
Active: failed (Result: exit-code) since Fri 2017-10-20 19:07:23 CST; 8s ago
Docs: man:systemd-sysv-generator(8)
Process: 10814 ExecStart=/etc/rc.d/init.d/mongod start (code=exited, status=1/FAILURE)

Oct 20 19:07:23 iZ114ypdot6Z systemd[1]: Starting SYSV: Mongo is a scalable, document-oriented database....
Oct 20 19:07:23 iZ114ypdot6Z mongod[10814]: Error starting mongod. /var/run/mongodb/mongod.pid exists.
Oct 20 19:07:23 iZ114ypdot6Z systemd[1]: mongod.service: control process exited, code=exited status=1
Oct 20 19:07:23 iZ114ypdot6Z systemd[1]: Failed to start SYSV: Mongo is a scalable, document-oriented database..
Oct 20 19:07:23 iZ114ypdot6Z systemd[1]: Unit mongod.service entered failed state.
Oct 20 19:07:23 iZ114ypdot6Z systemd[1]: mongod.service failed.

Cent OS 7上需要把mongoDB添加到systemd,否则会出现上面的错误

将mongoDB添加到systemd

# vim /usr/lib/systemd/system/mongod.service

[Unit]
Description=mongodb database

[Service]
User=mongod
Group=mongod
Environment="OPTIONS=--quiet -f /etc/mongod.conf"
ExecStart=/usr/bin/mongod $OPTIONS run
PIDFile=/var/run/mongodb/mongod.pid

[Install]
WantedBy=multi-user.target

建立链接
ln -s /usr/lib/systemd/system/mongod.service /etc/systemd/system/multi-user.target.wants/

重新加载systemctl
systemctl daemon-reload

centos安装node的问题

当我们用yum install nodejs
发现node版本过低
决定安装n 来管理更新node版本
npm i n -g
当我们用n安装node版本时候,发现node版本切换失败
或者发现node或者npm需要sudo权限

如果遇到以上问题
解决思路和方法如下

思路:n不能切换node,那最有可能的情况就是,你的node的安装目录和 n 默认的路径不一样。我们需要对node和npm全局命令做好软连接映射,如果你用的不是root用户而是做过提权的用户,修改一下node的分组权限即可即为755

ln -s /usr/local/bin/node /usr/bin/node  --将node源文件映射到usr/bin下的node,全局node即可访问n安装的node路径

ln -s /usr/local/bin/npm /usr/bin/npm

修改node权限,不需要每次都sudo
cd /usr/local/bin
chmod -R 755 node

MongoDB修改数据类型

db.orders.find({'subType' : { $type : 2 }}).forEach(function(x) {
    x.subType = parseInt(x.subType);
    db.orders.save(x);
})

本来subType字段的值应该是long long,结果不小心变成了string。上面的命令行用$type 为2查找凡是subType值的类型为string的文档,并传递一个JavaScript函数给forEach。
x就是当前一条记录(doc),之后很简单,转型并保存

MongoDB导入导出以及数据库备份

MongoDB导入导出以及数据库备份
-------------------MongoDB数据导入与导出-------------------
1、导出工具:mongoexport
1、概念:
mongoDB中的mongoexport工具可以把一个collection导出成JSON格式或CSV格式的文件。可以通过参数指定导出的数据项,也可以根据指定的条件导出数据。
2、语法:
mongoexport -d dbname -c collectionname -o file --type json/csv -f field
参数说明:
-d :数据库名
-c :collection名
-o :输出的文件名
--type : 输出的格式,默认为json
-f :输出的字段,如果-type为csv,则需要加上-f "字段名"
3、示例:
sudo mongoexport -d mongotest -c users -o /home/python/Desktop/mongoDB/users.json --type json -f "_id,user_id,user_name,age,status"

2、数据导入:mongoimport
1、语法:
mongoimport -d dbname -c collectionname --file filename --headerline --type json/csv -f field
参数说明:
-d :数据库名
-c :collection名
--type :导入的格式默认json
-f :导入的字段名
--headerline :如果导入的格式是csv,则可以使用第一行的标题作为导入的字段
--file :要导入的文件

2、示例:
    sudo mongoimport -d mongotest -c users --file /home/mongodump/articles.json --type json

-------------------MongoDB备份与恢复-------------------
1、MongoDB数据库备份
1、语法:
mongodump -h dbhost -d dbname -o dbdirectory
参数说明:
-h: MongDB所在服务器地址,例如:127.0.0.1,当然也可以指定端口号:127.0.0.1:27017
-d: 需要备份的数据库实例,例如:test
-o: 备份的数据存放位置,例如:/home/mongodump/,当然该目录需要提前建立,这个目录里面存放该数据库实例的备份数据。
2、实例:
sudo rm -rf /home/momgodump/
sudo mkdir -p /home/momgodump
sudo mongodump -h 192.168.17.129:27017 -d itcast -o /home/mongodump/
-
2、MongoDB数据库恢复
1、语法:
mongorestore -h dbhost -d dbname --dir dbdirectory

    参数或名:
        -h: MongoDB所在服务器地址
        -d: 需要恢复的数据库实例,例如:test,当然这个名称也可以和备份时候的不一样,比如test2
        --dir: 备份数据所在位置,例如:/home/mongodump/itcast/
        --drop: 恢复的时候,先删除当前数据,然后恢复备份的数据。就是说,恢复后,备份后添加修改的数据都会被删除,慎用!
2、实例:
mongorestore -h 192.168.17.129:27017 -d itcast_restore --dir /home/mongodump/itcast/

socket一些监听无响应,比如连接断掉后,socket.on('disconnect')没有效果

问题复现情况之一

如下代码
在连接成功后先执行了类似await这样的异步等待操作,可能会导致socket.on('disconnect')未执行的问题

 io.on('connection', async socket => {
 ... 
       let res     = await sockets.find({id: socket.id)})

        await sockets.remove({id: socket.id})
         

        socket.on('private message', function (from, msg) {
            console.log('I received a private message by ', from, ' saying ', msg)
        })

        socket.on('disconnect', reason => {
            // console.log('下线:' + reason)
            delete wsUsers[query.id]
            socket.emit('onlineCount', io.eio.cliensCount)
        })
 ...
    })

调整一下它们的执行顺序,可以解决

  io.on('connection', async socket => {
 ...
        socket.on('private message', function (from, msg) {
            console.log('I received a private message by ', from, ' saying ', msg)
        })

        socket.on('disconnect', reason => {
            // console.log('下线:' + reason)
            delete wsUsers[query.id]
            socket.emit('onlineCount', io.eio.cliensCount)
        })

        let res     = await sockets.find({id: socket.id)})
         
        await sockets.remove({id: socket.id})
 ...
    })

Error: couldn't connect to server 127.0.0.1:27017 src/mongo/shell/mongo.js

[jack@iZ114ypdot6Z ~]$ mongo
MongoDB shell version: 2.6.12
connecting to: test
2017-10-20T15:06:10.345+0800 warning: Failed to connect to 127.0.0.1:27017, reason: errno:111 Connection refused
2017-10-20T15:06:10.346+0800 Error: couldn't connect to server 127.0.0.1:27017 (127.0.0.1), connection attempt failed at src/mongo/shell/mongo.js:146

▽
exception: connect failed

首先明白就是链接失败,是否是服务器重启,mongo服务没有设置自动启动,可以首先启动mongo服务再试试

启动MongoDB

$ sudo systemctl start mongod.service

查看是否启动成功

$ sudo systemctl status mongod.service

若显示 active(running)则启动成功!或者

$ sudo cat /var/log/mongodb/mongod.log

如出现 [thread1] waitingforconnectionsonport

其中的默认为27017,在 /etc/mongod.conf中配置,则启动成功!

安装出现"raw.githubusercontent.com (raw.githubusercontent.com)|::|:443... 失败:拒绝连接。"问题

出现以下错误:
正在连接 raw.githubusercontent.com (raw.githubusercontent.com)|0.0.0.0|:443… 失败:拒绝连接。
正在连接 raw.githubusercontent.com (raw.githubusercontent.com)|:😐:443… 失败:拒绝连接。
image

进入网站:https://site.ip138.com/raw.Githubusercontent.com/

输入raw.githubusercontent.com
查询其相关的IP地址:
image

在Ubuntu终端输入:
sudo vi /etc/hosts

选择上面一个添加内容即可:
比如:
151.101.76.133 raw.githubusercontent.com
或者
151.101.228.133 raw.githubusercontent.com
image

然后保存,退出

然后再次执行
wget https://raw.githubusercontent.com/mavlink/mavros/master/mavros/scripts/install_geographiclib_datasets.sh
就可以啦!!!
image

Activity class {package/class} does not exist原因及解决方法

前两天用Android Studio在测试机上编译运行一个project时,编译通过,运行时报错,报错提示主要信息为:

Activity class {.../MainActivity} does not exist.

顿时一脸懵逼,MainActivity明明存在啊,而且也在manifest中声明了,之后又检查了App module下build.gradle中的配置信息,

defaultConfig {
        applicationId "com.chan.example"
        minSdkVersion 15
        targetSdkVersion 19
        versionCode 146
        versionName "2.0.0.1112.0"
    }

applicationId的值与包名保持一致啊,顺便说一句,这里的值可以不写,默认为包名。
实在想不出来问题原因,后来无意中发现,之前在测试机上安装过一个与当前app包名相同的老版本应用,于是果断卸载之,clean project,果然可以正常启动了。

小结一下,通常导致Activity class {package/class} does not exist这类问题的主要原因在于:

1.build.gradle下defaultConfig中applicationId的值与包名不一致;

该情况下,可以省去不写,或保持与包名一致。

2.运行过两个包名一样的应用,导致无法识别入口activity;

卸载 当前包名的应用,或通过adb shell rm /data/app/*.apk 卸载所有apk(Android安装包)。

encodeURIComponent throws an exception

when the user enters invalid unicode characters (such as U+DFFF), the function throws an exception with the following message:

For example

string contained an illegal UTF-16 sequence

Taking the programmatic approach to discover the answer, the only range that turned up any problems was \ud800-\udfff, the range for high and low surrogates

So, if you want to take the easy route and block surrogates, it is just a matter of:

urlPart = urlPart.replace(/[\ud800-\udfff]/g, '');

If you want to strip out unmatched (invalid) surrogates while allowing surrogate pairs (which are legitimate sequences but the characters are rarely ever needed), you can do the following:

function stripUnmatchedSurrogates (str) {
    return str.replace(/[\uD800-\uDBFF](?![\uDC00-\uDFFF])/g, '').split('').reverse().join('').replace(/[\uDC00-\uDFFF](?![\uD800-\uDBFF])/g, '').split('').reverse().join('');
}

reference

怎么从命令行中把本地文件复制到服务器上?

采用scp命令

  1. 将本地文件拷贝到 远程

scp文件名 --用户名 @ip或者名称 :远程路径

scp /home/test.ora [email protected]:/home/root

  1. 从远程将文件拷回本地

scp --用户名 @ip或者名称 :文件名 本地路径

scp [email protected]:/home/root /home/test.ora

  1. 将本地目录拷贝到远程

scp -r 目录名 用 户名 @ip或者名称 :远程路径

scp -r /home/test.ora [email protected]:/home/root

  1. 从远程将目录拷回 本地

scp -r 用户名 @ip或者名称 :目录名 本地路径

scp -r [email protected]:/home/root /home/

git 添加 .gitignore 规则无效

正常情况
如果在项目开始的时候配置了.gitignore文件,对一些文件进行忽略。
进行版本控制的时候就会忽略对这些文件的跟踪,这是正常情况。

特殊情况
但是有一种情况是,项目开始的时候 没有将一些无关文件配置进 .gitignore里面。导致文件已经进行跟踪了,但是目前想把这些文件add 到 .gitignore文件中,但是发现没有效果。 修改文件之后,git 依然检测到了,文件改动。

规则
原来git有一条规则,“如果一个文件一开始没有添加到.gitignore里面,中途添加进去。git 将不会 忽略这个文件。”在这种情况下,必须使用 git rm --cached < file name > 这个命令 来 移除对这个文件的跟踪,然后将 这个不想被跟踪的文件 添加到 .gitignore文件里面 就可以了。

这时 做完这些工作之后 你还必须 再 commit 一次,这次commit之后 ,文件就可以被忽略了。

CENTOS 8安装docker-ce出现requires containerd.io >= 1.2.2-3错误解决

CentOS Docker 安装

Docker 支持以下的 64 位 CentOS 版本:

CentOS 7
CentOS 8
更高版本...
使用官方安装脚本自动安装
安装命令如下:

curl -fsSL https://get.docker.com | bash -s docker --mirror Aliyun

也可以使用国内 daocloud 一键安装命令:

curl -sSL https://get.daocloud.io/docker | sh

image

解决办法

手动下载并安装,下载地址:https://centos.pkgs.org/7/docker-ce-stable-x86_64/containerd.io-1.2.13-3.1.el7.x86_64.rpm.html

安装

[root@huidukongjian-h1 ~]# wget https://download.docker.com/linux/centos/7/x86_64/stable/Packages/containerd.io-1.2.13-3.1.el7.x86_64.rpm

[root@huidukongjian-h1 ~]# yum -y install ./containerd.io-1.2.13-3.1.el7.x86_64.rpm

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.