小编Ada*_*dam的帖子

使用连接池处理活动记录超时的正确方法是什么?

我已经跟踪了一个奇怪的错误,undefined method `run_callbacks' for nil:NilClass并且能够使用此示例代码重现它.

基本上问题是活动记录正在超时(默认为5s)但抛出一个未定义的方法异常,这对我来说似乎不对.

但无论如何,处理这个问题的正确方法是什么?在我的真实代码中,我有一堆忙于做实际工作的线程但偶尔会遇到这个错误.所以想象一下,这puts是真正的代码.我希望现有的线程在发生这种情况时继续工作.

threads = []
10.times do |n|

 threads <<  Thread.new {
    ActiveRecord::Base.connection_pool.with_connection do |conn|
      puts "#{n} #{conn}"
      res =  conn.execute("select sleep(6)", :async => true)
    end
  }
end

# block and wait for all threads to finish
threads.each { |t| puts "joined" ; t.join }
rescue Exception => e
  puts  $!, $@
end
Run Code Online (Sandbox Code Playgroud)

如果我按原样运行此代码,我会得到异常.如果我将睡眠减少到4s,我就不会.这是6s睡眠的输出.

joined
0 #<ActiveRecord::ConnectionAdapters::Mysql2Adapter:0xb73c6380>
1 #<ActiveRecord::ConnectionAdapters::Mysql2Adapter:0xb73c5548>
2 #<ActiveRecord::ConnectionAdapters::Mysql2Adapter:0xb73c4fe4>
3 #<ActiveRecord::ConnectionAdapters::Mysql2Adapter:0xb73c4a80>
4 #<ActiveRecord::ConnectionAdapters::Mysql2Adapter:0xb73c451c>
joined
joined
joined
joined
joined
undefined …
Run Code Online (Sandbox Code Playgroud)

mysql activerecord multithreading exception-handling ruby-on-rails

14
推荐指数
1
解决办法
1405
查看次数

如何使用capistrano将文件复制到一堆服务器

我使用cap调用很多来在一堆服务器上运行命令.我还想使用capistrano将单个文件推送到一堆服务器.

起初我认为PUT会这样做,但是put会让你为文件创建数据.我不想这样做,我只想将现有文件从我运行capistrano命令的机器复制到其他机器.

如果我可以做这样的事情会很酷:

host1$ cap HOSTS=f1.foo.com,f2.foo.com,f3.foo.com COPY /tmp/bar.bin 
Run Code Online (Sandbox Code Playgroud)

我希望它可以复制主机1:/tmp/bar.bin到f1.foo.com:/tmp/bar.bin和f2.foo.com:/tmp/bar.bin和f3.foo.com:/tmp/ bar.bin

这种事情看起来非常有用,所以我肯定必须有办法做到这一点......

capistrano copy file

6
推荐指数
1
解决办法
8321
查看次数

内容未使用 firebaseserve 更新——仅托管

我正在尝试测试对我的网站的更改。但是当我进行更改并重新启动时,firebase serve --only hosting更改不会显示。

如果这很重要的话我正在使用Vuejs......

firebase vue.js firebase-hosting firebase-cli

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