🚀 Docker解锁:解决在CentOS服务器上运行Node.js时的线程创建错误

docker运行node异常

在服务器中运行docker容器,镜像是一个Next.js的服务,需要运行node的服务,在本地macOS上运行docker容器是没问题,但在服务器(centOS系统)中却报错,错误信息如下:

报错信息

1
2
3
4
5
6
7
8
9
10
nodejs[2608]: ../src/node_platform.cc:61:std::unique_ptr<long unsigned int> node::WorkerThreadsTaskRunner::DelayedTaskScheduler::Start(): Assertion `(0) == (uv_thread_create(t.get(), start_thread, this))' failed.
1: 0x7f620e2893cc node::Abort() [/lib/x86_64-linux-gnu/libnode.so.72]
2: 0x7f620e28945b [/lib/x86_64-linux-gnu/libnode.so.72]
3: 0x7f620e30bde2 node::WorkerThreadsTaskRunner::WorkerThreadsTaskRunner(int) [/lib/x86_64-linux-gnu/libnode.so.72]
4: 0x7f620e30bf16 node::NodePlatform::NodePlatform(int, v8::TracingController*) [/lib/x86_64-linux-gnu/libnode.so.72]
5: 0x7f620e2542c8 node::InitializeOncePerProcess(int, char**) [/lib/x86_64-linux-gnu/libnode.so.72]
6: 0x7f620e2544ac node::Start(int, char**) [/lib/x86_64-linux-gnu/libnode.so.72]
7: 0x7f620d7c2d90 [/lib/x86_64-linux-gnu/libc.so.6]
8: 0x7f620d7c2e40 __libc_start_main [/lib/x86_64-linux-gnu/libc.so.6]
9: 0x5563adef00f5 _start [nodejs]
阅读更多
解锁你的GitHub:一步步解决'Permission Denied (Publickey)'错误

如果在github pull/push/fetch时提示 Permission denied (publickey) 没权限,则需要为github配置ssh密钥,这里针对macOS系统举例,亲测可用。

创建SSH密钥

1
ssh-keygen -t ed25519 -C "youremail@gmail.com"

建议使用 ED25519 这个新算法,如果是旧的系统不支持,则可以使用rsa,那么后续流程中的文件名也要更改为id_rsa

1
ssh-keygen -t rsa -b 4096 -C "your_email@example.com"
阅读更多
Chrome 访问 Http 地址报错:ERR_SSL_PROTOCOL_ERROR

问题

当用 Chrome 访问某些 http 的网站时,会无法打开,换一台设备或其他浏览器是能正常打开的。

1
2
3
此网站无法提供安全连接
www.host.com 发送的响应无效。
ERR_SSL_PROTOCOL_ERROR
阅读更多
The New Logcat in Android Studio Electric Eel(电鳗)

更新到刚出的 Android Studio Electric Eel(电鳗),首先体验到全新的 Logcat 工具,我们来看看这次更新有什么新变化

阅读更多
更新Hexo主题为Melody

升级hexo为6.0

安装 Hexo

使用 npm 安装 Hexo,升级为6.0。
$ npm install -g hexo-cli

变更主题为melody

由于之前使用的Yilla主题已经很久没更新了,还不支持hexo6的新特性。
这次使用了PicGo作者的hexo主题:melody,支持hexo5之后的特性,包括:

阅读更多
Kotlin如何避免“!!”(非空断言)

当我们把Java自动转成Kotlin的时候,代码里会出现很多非空断言!!。或者某些场景下因为IDE提示或编译错误,也让我们自己加上了一些!!
但使用!!的后果是有可能抛出IllegalArgumentException:Parameter specified as non-null is null

如何避免!!

使用?.let/?.apply/?.run

这种是最常用的方法,也是首选的方法。但当有多个变量同时要判空时,或者需要处理为null时的逻辑,这种方式稍微有一点麻烦,下面会讲到一些新的方式。

1
2
3
disposable?.let {
if (!it.isDisposed) it.dispose()
}

用Val替代Var

1
2
3
4
5
6
7
8
9
10
var mutableString:String? = null

fun run() {
mutableString = "a"
printText(mutableString)
}

fun printText(text: String) {
...
}

此时会报错Smart cast to 'String' is impossible, because 'multableString' is a mutable property that could have been changed by this time :app:compileDebugKotlin FAILED。由于multableString是Var变量,为了避免多线程对变量的修改而出现Null的情况,kotlin从编译上进行了限制。

  • 解决方法1是把var变量改为val变量

    1
    2
    3
    4
    5
    val mutableString:String = "a"

    fun run() {
    printText(mutableString)
    }
  • 解决方法2是写一个新的val变量,将var变量赋值给它,将val作为参数

    1
    2
    3
    4
    5
    fun run() {
    mutableString = "a"
    val string = mutableString ?: ""
    printText(string)
    }

阅读更多
Unused Resource Explorer——Android无用资源浏览器

前言

  • 全自动化的清理脚本,容易会出现多删除了资源的情况
  • 升级了gradle版本后,原来一些根据lint分析的工具出现了问题

想要的工具

  • 能对扫描出来的无用资源进行浏览,图片能够预览
  • 能对扫描出来的无用资源进行分类
  • 可自动清理,也可手动个别清理
阅读更多
Gitment评论系统介绍

前言

最近各种博客评论模块相继暂定服务,首先是多说,然后网易云跟贴。剩下的选择有Disqus,不过墙内经常是连接不上,还有一个畅言没用过,不过需要是一个备案,并且部署到github pages上的站点过不了审核。

看到网上有说Gitment这样一个评论工具,原理是使用了Github Issue的提问题功能。相当于每一条博客对应上一个issue,一个评论相当于issue的回复,这种解决问题的方式十分讨巧,要点赞!

转发

具体的使用方式我就不搬砖了,提供2个链接参考一下。

Gitment评论功能接入踩坑教程

Gitment:使用 GitHub Issues 搭建评论系统


FastDelete-Windows下快速删除文件夹的工具

FastDelete是一个快速删除文件夹的工具,基于nodejs里文件操作的强大性能。特别是文件夹里存在大量小文件的情况下,FastDelete能够比Windows的删除操作快上十倍。

最近项目发展得很快,代码越来越多,加上AndroidStudio构建时会在build目录下生成大量文件。有时需要清理一下build目录,或者把某些分支代码目录删除掉,节省宝贵的硬盘空间。不过问题来了,Windows下对于这种大量小文件的操作非常慢,现在删除一个分支竟然要2-3分钟的时间才行,所以才萌生了这个工具的想法。

一开始用命令行执行还是稍复杂了点,后来加上了文件夹右键菜单后,删除得更爽快了。

使用前提

安装NodeJS

下载代码

点击下载zip

进入github下载

首次使用

执行 install.bat批处理文件。

  • 它会下载依赖包到本地的node_modules目录下
  • 自动生成并注册reg文件,弹窗中点击“是”添加上右键菜单

右键菜单运行

  • 在文件夹的右键菜单中,点击极速删除,即可删除该目录

命令行运行

  • 在cmd中执行node delete.js <deleteDir>

Android gradle.zip文件下载失败

Android Studio构建时出现下面的错误

1
Gradle sync failed: Could not run build action using Gradle distribution 'xxxxxx/gradle-2.14.1-all.zip'.

解决方法

  1. 访问https://services.gradle.org/distributions/找到我们所要的版本
  2. 然后在文件上点右键复制链接
  3. 打开我们项目中gradle/wrapper/gradle-wrapper.properties文件
  4. 修改distributionUrl为复制的链接
  5. 重新build项目,会从我们设置的url下载gradle-xxx-all.zip

例如:

1
2
3
4
5
6
#Mon Dec 28 10:00:20 PST 2015
distributionBase=GRADLE_USER_HOME
distributionPath=wrapper/dists
zipStoreBase=GRADLE_USER_HOME
zipStorePath=wrapper/dists
distributionUrl=https\://services.gradle.org/distributions/gradle-2.14.1-all.zip