没找到什么好办法,目前是通过 session 保存 referrer 来实现。
# application_controller
before_action do
session[:return_to] = request.referrer
end
# action
def update
#...
redirect_to (session[:return_to] || other_path)
end
大致思路这样,实际使用还要其他额外处理
这样还好啦其实,你看看像 Go 没有单行 if 那代码简直了!
真要为了优雅不计成本了呀?!
本来一次循环搞定的事要不要这么费劲?
str_arr = []
str = ''
arr.each {|e| str == '' ? str = "#{e}" : str = "#{str}/#{e}"; str_arr << str }
估计迟到会有 app/routes/
或 config/routes/
目录
黑化了。。。
SSL 加密自带压缩,你用 gpg/openssl 加密一个文件,再 gzip 基本没有效果,小文件还会变大。
不加 accept-encoding 默认不会返回 gzip 给客户端的。
Lisp 下还有 when 不需要 else 的 if
这段翻译错了:
dolist (obj *neurons_list*)
unless weights_comprehensive_regulation(obj) == 0
modify_weights_module (neurons_name obj)(weights_comprehensive_regulation obj )
end
# =>
neurons_list.each do |obj|
unless obj.weights_comprehensive_regulation == 0
modify_weights(obj.neurons_name, obj.weights_comprehensive_regulation)
end
end
无聊一下:)
其实最好还是用 Tab,然后把 Tab Width 设置成自己想要的
ActionView 依赖的,估计都得中枪!
你这负载一点不算高吧!
:
#!/usr/bin/env ruby
require 'webrick'
include WEBrick
class FileUploadServlet < HTTPServlet::AbstractServlet
def do_POST(req, res)
filedata = req.query["file"]
filename = filedata.filename
file = File.open(filename, "wb")
file.syswrite filedata
file.close
res.body = "uploaded file: #{filename}"
end
end
dir = Dir.pwd
svr = HTTPServer.new(Port: ARGV[0] || 3000, DocumentRoot: dir)
svr.mount('/', HTTPServlet::FileHandler, dir, FancyIndexing: true)
svr.mount("/upload", FileUploadServlet)
trap("INT") { svr.shutdown }
svr.start
测试:curl -F "file=@/tmp/meimei.png" http://127.0.0.1:3000/upload
回头看好像有戏,只要在 C 层面实现 each_as(:name)
最好不这样做,但一定要的话 参考 https://github.com/steveklabnik/request_store
之前也想过,还企图解决一下,不过代价有点高!
这是以前的代码:
class Array
def each_as(name, &block)
define_singleton_method(name) do
instance_variable_get("@__#{name}")
end
define_singleton_method("#{name}=") do |value|
instance_variable_set("@__#{name}", value)
end
each do |elem|
send("#{name}=", elem)
instance_exec(&block)
end
end
end
a = [1,2,3,4,5]
a.each_as(:x) { puts x }
a.each_as(:int) do
puts int * 2
end
配置编辑器有自动补全,用 || 问题不大。
可以参考一下: https://github.com/collectiveidea/audited 加上状态控制
Go 很好,Go 很吊,但还是准备去玩 crystal,因为写 Go 会手抽筋!
crystal 类似 ruby 的语法,写起来爽快,况且现在支持静态编译了 crystal build src/app.cr --release --link-flags -static
跟 Go 一样编译成无依赖单文件。
这样不影响启动吧?
本来就不会有影响呀,你怎么配置的?
多个数据库,除了默认的,其他你要手工连接 establish_connection DB_CONFIG
,怎么会影响启动呢?
ActiveRecord::Base.connection.active?
从 2.4.0 升到 2.5.0 看到这个报错。
例子 https://mensfeld.pl/2017/12/ruby-2-5-0-upgrade-remarks/
好像旧的有些版本会有报错,有些没有报,奇怪。
我不这样写,但问题是之前的版本没有报错,现在 2.5.0 报错。
升级然后跑崩了,多个 gem 有此问题,这个没办法接受:
$ irb
irb(main):001:0> def m(arg, &block)
irb(main):002:1> pp arg
irb(main):003:1> block.call
irb(main):004:1> end
=> :m
irb(main):005:0> m(100) { puts "block" }
100
block
=> nil
irb(main):006:0> m 100 { puts "block" }
Traceback (most recent call last):
1: from /home/ruby/.rbenv/versions/2.5.0/bin/irb:11:in `<main>'
SyntaxError ((irb):6: syntax error, unexpected '{', expecting end-of-input
m 100 { puts "block" }
^)
irb(main):007:0>
以前很多代码都是这样写的! method arg { block }
其实严谨些是这样的写法好。method(arg) { block }
妄下结论的都是耍流氓
高了
是招 ruby 的吗?
@small_fish__ @atlas 看更新
阿里云 4 core 8G, puma 4 workers 8 threads, 约 2100 rpm, 50-1000 ms/r avg 200ms, 每次请求都读写数据库的 api, cpu 几乎保持 80% 以上,load 都 4.x 以上。数据库不在同一台机。
newrelic 的数据,再优化一下,单机 50rps 以上应该问题不大。看需求做横向扩容,比如单机做到 50 rps,目标是 1000rps,那堆 20 台服务器呗。
补充一下,cpu 占有高跟业务有关,计算型的。另外还有几个 Sidekiq 在跑。可能阿里云的 cpu 配置也不高,在本地测试没这么高占用率。
大致系统是这样的:
[物联网设备] ---- [ Go 中心处理系统 ] --- [ Rails 业务系统 ]
Go 处理着几千长连接,占用的资源非常少,简单处理后转发到 Rails 业务系统。
Go htop:
Rails puma top:
那问题不很明确吗?你给出 view 的代码看看呗,可能调用了 Devise 或者 Request 相关的东西, 你就拿 renderer 那句去 debug 就行啦