两个数据库刚设置为远程相互同步,结果发现有一边的数据库少了一些东西,然后打算把这个不全的数据库删了,用 rake 重新 load 生成一个。结果是两边的数据库都被删了,当时就蒙了。。。。。还好,发现导数据的时候还有个备份
#23 楼 @reus #24 楼 @saiga 网上是这么说的,ruby 解释器一退出,就会杀死所有的线程,不管它们的死活。如果采用任务队列的话,那么会存在延时,也就是说这个任务可能会等待几秒中然后才会执行。
我目前的使用场景是,前端发来一个请求,我要马上返回,让它把页面渲染出来,同时有线程在后面获取数据,时间有时会很长,10s 以上,如果顺序执行,那么在最糟糕的情况下,这个页面渲染出来需要很长时间;如果等页面渲染完在发请求来获取数据,这样又慢了一段时间! 目前我使用 ruby 的 drb 库来实现,在后台启动一个 drb server,在 action 中发一个请求给 drb server,创建线程的事情就交给它了,action 也可以马上返回。这样的缺点是如果并发大的话,创建的线程就会很多
不知到你们有没有好的方法,或者能够保证队列中的任务立马运行
public class TestThread {
public static void main(String[] args) {
TestThread ts = new TestThread();
Thread myThread = ts.new MyThead(100);
myThread.start();
System.out.println("main");
}
public class MyThead extends Thread {
private long sleepTime;
public MyThead (long sleepTime) {
this.sleepTime = sleepTime;
}
public void run() {
for (int i = 0 ; i < 10; i++) {
System.out.println(this.getName() + "\t----- " + i + " -----");
try {
Thread.sleep(sleepTime);
} catch (InterruptedException e) {
e.printStackTrace();
}
}
}
}
}
运行结果:
main
Thread-0 ----- 0 -----
Thread-0 ----- 1 -----
Thread-0 ----- 2 -----
Thread-0 ----- 3 -----
Thread-0 ----- 4 -----
Thread-0 ----- 5 -----
Thread-0 ----- 6 -----
Thread-0 ----- 7 -----
Thread-0 ----- 8 -----
Thread-0 ----- 9 -----
这是 java 中的实现
像 The Little Schemer 这本书一样,从 ruby 代码中来讲解和运用基础知识
不稳定的话可以用下面方法解决,就是把 session 加载进来
prepend_before_filter :load_session, only: :flash_upload
def load_session
unless session.loaded?
se = Marshal.load(ActiveSupport::Base64.decode64(params["_dituhui_session"]))
logger.info("\n--------session is: #{se.inspect}-----------\n")
request.session.update(se)
end
end
其实就是在 authenticate_user! 前,执行 load_session
对简单的东西多加思考,取其精髓,很受启发
#19 楼 @zhangyuan rails2 和 rails3 中实现方法稍有差别,但他们都重写了 inspect 方法
收藏,可能以后会遇到这样的问题
感觉怎么样?