MongoDB schema-free 这种也可以考虑一下。
Redis 理论上也行。https://github.com/redis-stack
或直接内嵌 KV 数据库 leveldb-ruby.
学习成本不高,找工作貌似不好找...
不怕,老家还有田。
Sinatra 也支持“Classic Style”
require 'sinatra/base'
class MyApp < Sinatra::Base
set :sessions, true
set :foo, 'bar'
get '/' do
'Hello world!'
end
end
http://sinatrarb.com/intro.html 你搜 Sinatra::Base
最近很火的一篇文章,看后你应该不会想私自安装了。
一个违规操作、损失 800 万、被判五年半:运维夏某某致「郑大一附院」智慧医院系统瘫痪 2 个小时,判破坏计算机信息系统罪
shell 运行 echo $LANG
试试,先确认系统编码是不是 utf-8 ,然后再打开终端设置,看一下终端的编码是不是 utf-8 .
全局变量好像没有好的办法,只能 eval.
像类变量,实例变量,本地变量都有方法。class_variable_get , local_variable_get, instance_variable_get, thread_variable_get
https://devdocs.io/ruby~2.6/module#method-i-class_variable_get
到终端里的设置里找找,一边有设置"回滚限制"的选项,不选中为不限制,或填一个比较大的值。
先确认为什么慢?是网络原因,还是接口本身性能问题,还是调用方式的问题?
有可能是发送程序容错处理,查询了祼域。
没找到相关资料,不过查看了一下,祼域确认有 MX 记录。
https://ruby-doc.org/stdlib-2.0.0/libdoc/net/smtp/rdoc/Net/SMTP.html
官方示例,两行代码搞定。
s3 国外区域在国内访问不了
用 rails 来处理 4000 并发的上传,单机基本不可能。
rails 限制不能使用异步方式,所以只能用线程. 按照一个 puma 进程配置 100 个线程,至少要 40 个 puma 进程。
所以上传这一块,只能用其它的高并发语言来写。或用 ruby ,但只需要 em 之类的异步方式,与 rails 的数据交互走 redis ,或上传成功后再调用 rails 接口。
另外一种简单的做法,使用 nginx upload module, nginx 是异步模型,所以不用担心性能问题. https://www.nginx.com/resources/wiki/modules/upload/
不过,4000 用户同时上传,按 100Mbps 带宽来算,一个人的上传带宽只有 25 Kbps . 300 Mbyte 的文件. (300 * 1024 * 8) / 25.6 / (60 * 60) 一个人上传 300M 差不多要 26 小时才能上传完。改成 1000 M 带宽,也要 2.6 小时. 千 M 带宽的成本真不低吧。
Article.all 的 .all 去掉
最重要的不是 p2p 节点的多吗?
就跟传销一样,下线要多才赚钱。
token 不过是一种激励机制,就是传销发展下线一样。不然没 p2p 节点,玩什么?
你如果认为 token 才是真正的创新,那和传销的舍弃掉商品交易的利润来赚钱,而靠发展下线赚大线没有什么差别。
看 puma 的日志文件,看有什么输出,nginx 提示 Connection refused,应该是 puma 启动失败了。
自己的淘宝客项目在用 scrapy 抓取数据练手。
公司有其它同事负责的爬虫项目,不过是用 ruby 自己写的,灵活性相对来说比较弱。
scrapy 挺弱的这个还真不赞同,就爬虫 框架 来说,代码层次的灵活性真不是其它框架能比的。
https://docs.scrapy.org/en/latest/topics/architecture.html
架构清晰,middleware 可以很好的处理用来做些定向网站抓取的异常处理,或 cookies 切换,或 代理 IP 切换。
item pipelines 能够很方便的能数据进行清洗和保存。
而 downloader 对那些保存下载资源的项目来说,也可以很好的把资源下载下来再保存到本地或 s3.
scrapinghub 提供了 Splash 这个库,浏览器集成非常高,支持用 lua 或 js 来定制,对某些情景来说,直接使用它能很简单的处理一些反爬虫。
不过 splash 本身有内存泄漏问题,官方的推荐做是是起两个 docker ,前面再用一个 haproxy 做负载均衡,当一个超内存时,直接重启此 docker .
本身基于 Twisted 异步网络库实现,所以 GIL 的问题影响并没有那么大。
弱点来说,就是基于 Twisted , 数据库驱动和 ORM 对它支持的并不是很好。
相对简单粗爆的处理办理参考 Twisted 官方文档,数据保存另外起线程。否则会阻塞整个 Twisted reactor,在一个页面有很多 items, piplines 的保存反而成为瓶颈。
或使用 redis twisted 库,先保存到 redis,再另外起进程来清洗数据。
就这个弱点来说,如果在 ruby 中使用 EventMachine ,也会存在此问题。
如果纯粹参考 scrapy 来实现的话,感觉还是很难超越它。就 ruby 的 EventMachine 库来说,HTTP Client 还是第三方实现。而 Twisted 官方已经在准备 http2 的实现了。
linux 不 patch 还是不能用中文输入法,所有我选 vscode .
上面说的功能大部分 vscode 都实现了。
谢谢 hooopo 大神了,又介绍了新的东西。
经测试,换了个正则可以了
/\A[\w+\-.]+@[a-z\d\-]+(\.[a-z\d\-]+)*\.[a-z]+\z/i
把 @ 前面的 .?
去掉了,貌似就没有问题了
主要提取 email 地址,比如 email from 地址为 < <[email protected]>>
,业务需要把 [email protected]
提取出来.
拆分也行,但是最后还是得用正则。
在好网络并发看起来并无差别,如果网站移动终端用户多,差别就大了。
比如某些移动用户网络不稳定导致一个请求要 5 秒在请求完成。 在 unicorn 的 2 进程下,5 秒内只能两个并发(unicorn 一个进程同一只能处理一个请求)。而 2 进程 32 线程的 puma,却可以处理 64 个并发(puma 一个线程处理一个请求)。
使用了 to_char 函数,是无法使用索引的,导致全表扫描。
签名的 uriencode 有编码要求没有? 比如:
'中文'的 UTF-8 的 urlencode 的值和 GBK 是不一样的。
URI.encode('中文') # %E4%B8%AD%E6%96%87
URI.encode('中文'.encode('GBK')) # %D6%D0%CE%C4
request.request_parameters
request.query_parameters
http://api.rubyonrails.org/classes/ActionDispatch/Request.html#method-i-request_parameters http://api.rubyonrails.org/classes/ActionDispatch/Request.html#method-i-query_parameters
物理机 archlinux + awesomewm
虚拟机 vbox + win 7 thin pc
awesomewm 真是神器,快捷键支持多屏,多桌面切换屏幕独立。
比如屏幕 1 切换到桌面 2,屏幕 2 还是还是桌面 1.