小编bja*_*obs的帖子

升级到 WebSocket 失败 vs. 未经授权的连接尝试被拒绝

使用 Rails 5 和 ActionCable

“无法升级到 WebSocket”与“未经授权的连接尝试被拒绝”。有人能告诉我这两个错误之间的区别以及它们会在哪些功能下发生吗?我相信“未经授权的连接尝试被拒绝”发生在

App.cable = ActionCable.createConsumer();
Run Code Online (Sandbox Code Playgroud)

我确实有:

def find_verified_user 
  if verified_user = env['warden'].user
    verified_user
  else
    reject_unauthorized_connection
  end
end
Run Code Online (Sandbox Code Playgroud)

但我不确定升级错误。

我真正想做的是在超时用户(未注销,但已超时)尝试发送消息时进行捕获。所以我不认为我必须在连接时捕捉到这个,而是在请求时。有什么方法可以根据请求处理错误吗?

此处的最终目标是在超时用户尝试发送消息时将其重定向到登录页面。现在,如果超时的用户发送消息,当他们点击发送时消息不会显示,也不会向用户说明原因。

ruby-on-rails websocket devise actioncable

2
推荐指数
1
解决办法
2107
查看次数

Ruby CSV.foreach 从特定行开始

我已经看到了一些帖子,没有真正的答案或过时的答案,所以我想知道是否有任何新的解决方案。我有一个巨大的 CSV 我需要读入。我不能在它上面调用 open() ,因为它会杀死我的服务器。我别无选择,只能使用 .foreach()。

这样做,我的脚本将需要 6 天才能运行。我想看看我是否可以通过使用线程并将任务分成两个或四个来减少它。所以一个线程读取第 1-n 行,一个线程同时读取第 n+1-end 行。

所以我需要只能在一个线程中读取文件的后半部分(稍后如果我将其拆分为更多线程,只需通过特定行的特定行)。

无论如何,Ruby 中有这样做吗?这可以从某一行开始吗?

CSV.foreach(FULL_FACT_SHEET_CSV_PATH) do |trial|
Run Code Online (Sandbox Code Playgroud)

编辑: 只是为了了解我的一个线程是什么样子的:

threads << Thread.new { 
CSV.open('matches_thread3.csv', 'wb') do |output_csv|

  output_csv << HEADER
  count = 1
  index = 0

    CSV.foreach(CSV_PATH) do |trial|
        index += 1
        if index > 120000 
            break if index > 180000
            #do stuff
        end
    end
end
}
Run Code Online (Sandbox Code Playgroud)

但是正如您所看到的,它必须迭代文件,直到它在开始之前记录 120,000。因此,目标是通过从第 120,000 行开始读取来消除读取第 120,000 行之前的所有行。

ruby csv foreach multithreading ruby-on-rails

2
推荐指数
1
解决办法
2958
查看次数

正则表达式非连续字符

目前我有:

[A-Za-z0-9._%+-]
Run Code Online (Sandbox Code Playgroud)

这匹配包含字母,数字和某些特殊字符的任何字符串(._%+-)

如何更改此值以使其不会与包含特殊字符的字符串连续匹配?

举例来说,我希望它匹配: foo.bar+testfoo.+bar+foo.

但不是: foo..bar+testfoo.bar++testfoo.bar++

regex

1
推荐指数
2
解决办法
6258
查看次数