A small gem to lubricate your testing workflow with prettier than usual diffs. Enable fancy colored diffs in your minitest assertions https://github.com/angelkar/pretty-diffs 1. Motivation When you make assertions between large strings with Minitest, for example JSON responses, it is laborious to identify what has changed. The usual workflow involves copy-pasting… Continue Reading Ruby Gem – angelkar/pretty-diffs

ComfortableMexicanSofa ComfortableMexicanSofa is a powerful Ruby on Rails 5.2+ CMS (Content Management System) Engine      Features Simple drop-in integration with Rails 5.2+ apps with minimal configuration CMS stays away from the rest of your application Powerful page templating capability using Content Tags Multiple Sites from a single installation Multi-Language Support (i18n) (ca,… Continue Reading Ruby Gem – comfy/comfortable-mexican-sofa: ComfortableMexicanSofa is a powerful Ruby on Rails 5.2+ CMS (Content Management System) Engine

近些年来,越来越多的JavaScript框架(即AngularJS,BackboneJS,ReactJS)变得越来越流行。许多公司和开发人员使用这些JavaScript框架开发应用程序。这些框架有很多的优势: 前端和后端独立开发 JavaScript框架+RESTFUL的API(或微服务架构) SPA(Single Page Application) 某种程度上有利于提高开发效率 但是使用JavaScript框架对前台尤其是需要支持搜索引擎的页面是很有问题的,这是因为我们使用这些框架基本上都是基于虚拟元素或属性和JavaScript绑定JSON对象,都是SEO不友好的。很多搜索引擎,社交媒体,爬虫甚至不支持抓取JavaScript的网页。 很庆幸的是,我们可以使用PreRender预渲染页面(PreRender通过执行页面上的JavaScript,然后呈现给搜索引擎爬虫)。 PreRender 预渲染解决方案 根据PreRender逻辑,有3个不同的级别的解决方案来实施prerender 方案1:应用层 通过中间件实现对应用程序级别prerender逻辑(即Express NodeJS中间件,Ruby on Rails的中间件,ASP.NET MVC中间件,…) Http请求到达 应用程序将检查Http请求是否来自爬虫(User Agent)。 如果请求来自爬虫,那么appliaction将调用prerender服务,把原来的URL作为查询字符串。 预渲染服务将调用应用程序 应用程序返回原始的HTML用JavaScript逻辑的prerender服务 预渲染服务将执行内部HTML的JavaScript(与浏览器类似) 预渲染服务将最终的HTML返回到应用程序。 Appliaction将最终的HTML返回到浏览器。 如果Http请求来自普通用户,应用程序将执行输出,并发送回浏览器。 方案2:服务器容器级别 通过使用URL重写中间件,实施服务器容器级别prerender逻辑(i.e. Apache,Nginx,IIS)。 Http请求到达 服务器容器(如Apache,Nginx,IIS)将检查Http请求是否来自爬虫(User Agent)。 如果Http请求来自爬虫,然后重写URL(将原始URL作为查询字符串)预呈现服务。 预渲染服务将调用应用程序 应用程序返回JavaScript逻辑原始的HTML 预渲染服务将执行内部HTML的JavaScript,与浏览器类似 预渲染服务将返回最终的HTML服务器容器(Apache,Nginx,IIS)。 如果Http请求来自普通用户,然后将流量重定向到应用程序。应用程序将执行并返回输出到服务器容器。 方案3:网络级别 我们通过负载均衡的代理实现网络级prerender逻辑,i.e. HAProxy: Http请求到达 负载均衡代理会检查Http请求是否来自爬虫(User Agent)。 如果Http来自爬虫,然后将流量重定向(将原始URL作为查询字符串)预呈现服务。 预渲染服务将调用应用程序 应用程序返回包含JavaScript原始的HTML 预渲染服务将执行内部HTML的JavaScript,与浏览器类似… Continue Reading PreRender 预渲染解决方案

Linux使用某些软件的时候会产生日志文件,而这些软件本身对日志不进行分割或者压缩处理,久而久之会导致日志文件异常巨大,影响机器性能,配置不高的VPS上尤为严重。而logrotate就是管理这些日志文件的神器,可以对单个日志文件或者某个目录下的文件按时间/大小进行切割,压缩操作;指定日志保存数量;还可以在切割之后运行自定义命令。 不想读那么多?直接去 /etc/logrotate.d 下随便复制一个文件,改名,然后直接进去看一下当中的英文,改一下内容即可。 logrotate 分割日志原理 系统会按照计划的频率运行logrotate,通常是每天。在大多数的Linux发行版本上,计划每天运行的脚本位于 /etc/cron.daily/logrotate 当然,也有一些系统的文件位置不同,比如Gentoo,这个脚本是 /etc/cron.daily/logrotate.cron 如果你想让logrotate运行频率更高(比如每小时运行一次),你只需要用一个脚本来让cron运行 /etc/cron.hourly/logrotate.cron 当logrotate运行的时候,它会读取自身的配置文件来决定需要分割日志文件的路径,分割日志文件的频率及保留多少个日志存档。 logrotate.conf 主配置文件 logrotate的主要配置文件位于 /etc/logrotate.conf 这个文件包含logrotate分割日志时所使用的默认的参数。这个文件一般是被注释掉的,所以你可以粗略浏览一下看看大概的设置。文件中的数个文件会在下文中提及。 注意当中的一行: include /etc/logrotate.d 这个目录就是各软件使用logrotate分割日志文件所使用的配置文件 logrotate.d 配置文件目录 使用ls命令可以看到目录下的文件,这些文件包含着各个软件分割日志的设置: ls /etc/logrotate.d 这个目录下的文件数量可能为零,也可能有很多个配置文件,这取决于你安装应用的数量。总体上说,你通过包管理软件安装的应用也会在这个目录下创建一个配置文件。 通常情况下这个文件包括一个syslog服务的配置文件,logrotate读取这个文件来分割系统日志。这个文件包含一条各种系统日志的记录,并包含一些类似于logrotate.conf的命令 注意 Ubuntu 9.10 之前的版本中没有syslog服务的记录,在之前的发行版本中,系统日志由 /etc/cron.daily/sysklogd 里的savelog命令分割 logrotate 应用配置文件 举个例子,Debian 系统下 php5-fpm 会在 /etc/logrotate.d/ 目录下生成一个配置文件,如下: /var/log/php5-fpm.log { rotate 12 weekly missingok notifempty… Continue Reading Linux logrotate 命令教程日志分割

Original: https://github.com/mritd/dockerfile/tree/master/shadowsocks shadowsocks   shadowsocks-libev 版本: 3.2.0 kcptun 版本: 20180316 打开姿势 docker run -dt –name ss -p 6443:6443 mritd/shadowsocks -s “-s 0.0.0.0 -p 6443 -m aes-256-cfb -k test123 –fast-open” 支持选项 -m : 指定 shadowsocks 命令,默认为 ss-server -s : shadowsocks-libev 参数字符串 -x : 开启 kcptun 支持 -e : 指定 kcptun 命令,默认为 kcpserver -k : kcptun 参数字符串 选项描述 -m : 参数后指定一个… Continue Reading dockerfile/shadowsocks at master · mritd/dockerfile

Original: https://github.com/hspazio/elastic_notifier ElasticNotifier    ElasticNotifier gem provides a simple API to send error notifications to an Elastic Search instance. It can also be used as plug-in for exception_notification gem to send error notifications caught by the Rack middleware. Installation Add this line to your application’s Gemfile: gem ‘elastic_notifier’ And then execute: $ bundle… Continue Reading Ruby Gem – hspazio/elastic_notifier: A Ruby exception notifier for ElasticSearch

本文介绍3中检测远程端口方式,telnet、nmap和nc。 如果Mac提示找不到命令,请用brew安装。 如果Linux提示找不到命令,请用apt-get或者yum安装。 1 telnet方式 命令: 检测已打开的端口80(HTTP) $ telnet google.com 80 Trying 216.58.197.174… Connected to google.com. Escape character is ‘^]’. ^C Connection closed by foreign host. 如果提示Connected to google.com,说明80端口可以访问。 检测未打开的端口88 $ telnet google.com 88 Trying 216.58.197.174… ^C 如果超时,说明端口未开放。 2 nmap方式 命令: 检测已打开的端口80(HTTP) $ nmap google.com -p 80 Starting Nmap 6.40… Continue Reading Linux检测远程端口是否打开