2012-04-24 26 views

回答

1

也许你可以使用类变量。类变量不仅仅是一个实例,它们在类的每个实例中都是相同的。

def do_something 
    if @@locked 
    render text: "Sorry, somebody else working here." 
    else 
    @@locked = true 

    # do the stuff you need to do here 

    @@locked = false 
    end 
end 
+2

如果你部署将无法正常工作发言权多个实例杂种。每个实例都有它自己的@@锁定变量。如果你想这样做,所以它是独立的部署,你必须使用文件系统。如果您部署在多台主机上,则必须在主机之间共享您创建锁的文件系统。 – RadBrad 2012-04-24 15:20:22

+0

我没想到那么远...... – klump 2012-04-24 15:24:07

1
require FileUtils 
def lockable_action 
    if File.exists? "/tmp/lock" 
    # sorry, I'm locked 
    else 
    File.open("/tmp/lock","w") {|f| f.write("1") 
    # do your thing 
    FileUtils.rm "/tmp/lock" 
    end 
endk 
相关问题