@lobb 安装 Ruby 时,使用自己编译的 openssl 试试。
wget https://codeload.github.com/openssl/openssl/zip/refs/heads/OpenSSL_1_1_1-stable -O openssl-1.1.1.zip
unzip openssl-1.1.1.zip
cd openssl-OpenSSL_1_1_1-stable
sudo ./config --prefix=/usr/local/ssl --openssldir=/usr/local/ssl shared zlib
make -j8
sudo make install
rvm reinstall 3.0.0 -C --with-openssl-dir=/usr/local/ssl
巧啊,场景和技术栈跟我们公司很像,都是 SaaS 系统,也是后端 Rails+MySQL,前端 jQuery+Bootstrap,并且也部署在阿里云青岛区。报表我们也准备用 ClickHouse 的,最终还是用了 StarRocks,写入并发过高还是有问题,复杂的 join 查询效果也不理想。我们系统项目代码快 40 万行了,目前还是传统 cap 部署,之前瓶颈一直都在数据库,分库分表后就稳定了。应用流量比较稳定,工作日均请求 4000w+,CPU 使用率经常保持在 50%~70%,没有明显的流量激增,也没怎么搞过突发扩容。现在有新的团队,准备搞容器化了。
使用sidekiq-limit-fetch
也行: https://github.com/deanpcmad/sidekiq-limit_fetch
发个问卷调查链接出来呗
这是指明了要挖 SAP、流利说 的墙角啊
Ruby 中的 yield
+ block
像 Python 的 with
用法
看一下这篇文章吧,讲得比较全面 https://blog.arkency.com/the-equals-equals-equals-case-equality-operator-in-ruby/
Class / Module
mod === obj #→ true or false
===
returns true if obj
is an instance of mod
or one of mod
’s descendants. Of limited use for modules, but can be used to classify objects by class.
Basically implemented as
obj.kind_of?(mod)
所以:
Module === Module # => true
Class === Class # => true
Object === Object # => true
String === String # => false
赞! ,还有个小 typo : file_filed
=> file_field
@lengcb 静态资源要用 nginx 处理,看看 Rails 对应环境 (config/environments/***.rb) 的配置是不是下面这样的
Rails.application.configure do
config.cache_classes = true
config.eager_load = true
config.assets.compile = false
config.serve_static_files = false
end
部署时配置 puma 的重启方式为 phased restart
(貌似和 preload_app!
有冲突)。
@return 有没有项目介绍?待遇贴出来看看有多优厚吧?
没想到公司真的奖了我一台宝马,这个 +1
只有我一个人发现了是 has_and_belongs_to_many
而不是 has_many_and_belongs_to
吗?
@huacnlee 改了 gemspec
之后确实可以用了,不过 will_paginate
和 kaminari
有冲突
@huacnlee 这么好的东西从 Rails 4.2 开始支持的啊,能从 Rails 4.0 开始支持吗?
公司介绍和职位诱惑可以接地气点噻,至少也可以贴个官网链接吧。 https://www.kdanmobile.com/zh-cn/
长沙使用 Ruby 的公司实在太少啦!顶一下湖南的公司。
assert excellent_group.will_be_sucessful
assert excellent_group.members.all?(&:will_be_successful)
顶一个长沙的 Ruby 工作。
关于 BINDINGS,楼主的最后 3 行输出结果应该分别是
puts(eval("@mystr << @@x", ob1.getBinding)) #=> ob1 string some other value
puts(eval("@mystr << @@x", ob2.getBinding)) #=> ob2 string some other value
puts(eval("@mystr << @@x", ob3.getBinding)) #=> ob3 string some other value
因为当 @@x = " some other value"
在顶层环境执行完后,相当于执行了 Object.class_variable_set("@@x", "some other value")
,而 MyClass、MyOtherClass 和 Object 都处于同一个 Class Tree 中,它们都会共享父类的类变量,此时 MyClass.class_variable_get("@@x")
和 MyOtherClass.class_variable_get("@@x")
都相当于是 Object.class_variable_get("@@x")
。
@ibugs 文章最后是不是笔误,应该是在 gbk 状态下,汉字最多可以存 32766 个字符,英文也为 32766 个字符吧。
for (var i = 0; i < 10; i++) {
setTimeout(function(a) {
console.log(a);
}, 1000, i);
}
71
出现 website is under heavy load 这种情况一般是当前请求过多,Passenger 处理不过来,尤其是在刚刚部署完,Passenger 重启的时候这个问题会比较明显。在有比较多的文件上传、数据导出的时候,也会严重阻塞 Passenger 对其它请求的处理,也比较容易导致 website is under heavy load。所以我的建议是:
1、在config/environments/production.rb
中,设置
config.assets.compile = false
理由请见: http://stackoverflow.com/questions/8821864/config-assets-compile-true-in-rails-production-why-not
2、限制 Nginx 文件上传的大小。
3、将 Passenger 换成 Unicorn,进行热部署,减少刚部署完成后大量请求阻塞,Unicorn 和 Nginx 的具体配置请参见: https://ruby-china.org/topics/12033
你这个可能会有很多原因,比如你页面中有连接 Redis,但一直连接不上,这时就会卡住 5 秒(Redis 的默认超时时间就是 5 秒)。或者也有可能是你 production 环境下 Rainbows 开的内存不够大,导致其频繁杀死、重启 Rainbows 进程,从而导致页面输出比较卡(ps:Rainbows 我没有用过,只用过 Unicorn)。以及其它原因等等。
在 MySQL 中,如果条件成立,则返回 1,不成立则返回 0,所以可以这样做:
select * from users where ( (name like '%王%') + (phone = '15888882222') + (age > 15) + ...) >= 2;
在 config/initializers/inflections.rb 中加入如下代码就可以了
ActiveSupport::Inflector.inflections do |inflect|
inflect.acronym 'API'
end
#12 楼 @ShiningRay 实在是找不到原因,临时用了 Thin,网上搜索出来的答案显然都和我们遇到的情形不一样。我中间重启过 nginx 和 unicorn 多次,有一次竟然可以了,之后再重启就再也不行了,非常诡异。
昨晚正好遇到和楼主同样的问题,nginx 搭配 unicorn 一直报 504 Gateway Timout 的错,换成 Thin 之后立马好了。unicorn server 和 nginx 的日志显示都很正常,设置超时什么的也不起作用,不知道是何原因。
好东西,正好适合我等基础差、英语差的菜鸟。