多谢提醒,已改
在用 test_adapter 时,默认所有 job 都不会被执行,只会被 enqueue。但是有时候我们期望一个异步 job 可以执行,得到一些副作用。我们可以加一个 inline 功能
RSpec.configure do |config|
config.around(:each, :inline_jobs) do |example|
origin_perform_enqueued_jobs = queue_adapter.perform_enqueued_jobs
origin_perform_enqueued_at_jobs = queue_adapter.perform_enqueued_at_jobs
queue_adapter.perform_enqueued_jobs = true
queue_adapter.perform_enqueued_at_jobs = true
example.run
ensure
queue_adapter.perform_enqueued_jobs = origin_perform_enqueued_jobs
queue_adapter.perform_enqueued_at_jobs = origin_perform_enqueued_at_jobs
end
def queue_adapter
ActiveJob::Base.queue_adapter
end
每种 queue_adapter 背后都有一个 queue,而且每个 spec 都在共享同一个 queue。
test_adapter => 一个实例变量 array
sidekiq_adapter => redis
async_adapter => 也是内存中的queue,线程池的线程会不断从queue取job,执行
每跑完一个 spec 应该还要清空每个 adapter 背后的 queue,否则有可能发生这种情况:一个 spec 其实没有 enqueue job,但是 have_been_enqueued 断言还是能通过,因为上一个 spec 也 enqueue 了同一个 job
ActiveJob::QueueAdapters::TestAdapter 暴露了它的 queue:enqueued_jobs
, performed_jobs
. 所以我们可以轻易清空 queue
# spec/support/active_job_helper.rb
RSpec.configure do |config|
config.around(:each) do |example|
example.run
ensure
queue_adapter.enqueued_jobs.clear
queue_adapter.performed_jobs.clear
end
def queue_adapter
ActiveJob::Base.queue_adapter
end
end
🚀太流畅了,可惜移动端用不上这个特性
赞👍
想看下“鳍片上全是灰尘”的图片
可以讲一下erb 的开发体验已经跟不上这个时代了
的原因吗?是哪个 next js 特性让你有这个观点?
看了 next js 的官网,比较吸引人的特性是零配置、ready for production。我没用过 next js,只用过 ant design pro,ant 也有这 2 个特性。
我喜欢 React、Vue 的原因跟 4L 一样:
不用用 JS 修改 DOM,关心 State 即可,框架会根据 State 渲染出对应的 UI UI 框架(ant design 等等)提供了丰富的组件 即使有这 2 个优点,对于网站后台类型的网页(交互相对简单),我觉得还是后端渲染方便些。
为啥一张“表”只能在一个“组”里,不能分配到多个“组”么
能不能批量把多个表放到一个组中,现在只能在“表”的表单中修改它所在的“组”
哈哈,我也是趁 github 挂了,来逛以下 ruby china
帮助链接错了
赶紧体验以下
把 outpost 翻译成“前哨”、“堡垒”,比“基地”好些。
基地给人的感觉像是整个应用的基础
导入所有表之后,建立关联关系步骤有点累😂
楼主应该想要动态定义 API。
如果在 Rails 启动时,从数据库加载路由,动态生成路由。一旦要定义新的 API,就得重启 Rails。
比较好的解决办法应该是 2 楼说的。让指定格式的 URL 都让一个 action 处理。在 action 里按照具体 URL 处理逻辑
# config/routes.rb
get 'gateway/:action', to: 'gateway#do'
# controllers/gateway_controller.rb
...
def do
case params[:action]
when A
process_a
when B
process_b
end
end
之前以为 ruby china 没有“相关话题”功能,然后在评论时发现了,就在评论区的最底部。
有点隐蔽,如果把它放在“点赞区”的下面,应该会显眼点
用逻辑与&&
替换 if
,可读性差了一点点。
从汕头坐高铁到深圳也很方便呀
上面 AR 的例子还包含了表和字段命名等隐式约定,不过不符合约定的话,也可以通过选项来配置实际的表名、字段
为啥不想重启 puma?
加了这个选项后还要重启 puma,因为 puma 进程还处于找不到 production.log
的状态
对变量命名挺有帮助,刚刚用中文搜了下"瓜分奖励"、"晒单",都有不错的翻译
上面的方法是在 ruby 进程中修改进程名,楼主想要在命令行更改的话,得传些值进去进程吧
Google 搜 ruby change process name,前几条链接就有答案:https://stackoverflow.com/a/451670/6680386
$0 = 'ruby [test-api]'
@ 文件 bin/stomp.rb 如下:
#!/usr/bin/env ruby
# 加载 Rails 环境
require_relative '../config/environment'
Daemons.run()
# 增加执行权限
$ chmod u+x bin/stomp.rb
# 后台运行
$ bin/stomp start
我们项目把订阅消息这部分逻辑放到 bin 目录下,部署时运行这个文件,启动进程。
用 Daemons 这个 Gem 将脚本包装成守护进程。
3
RubyChina 精品贴越来越多啦
楼主英文水平有限,如有错误请大家指正
楼主应该是想动态添加查询条件,ransack 满足这个需求