Grape中的代碼以下:git
def market @market ||= Market.find(params[:id]) end
@market基於類層次的實例變量,屬於非線程安全,若是一直使用多線程服務器,可使用 Thread.current
代替:github
def market Thread.current[:market] ||= Market.find(params[:id]) end
若是考慮到之後哦使用其餘類型服務器,好比 Thin, 可使用 request_store gem 包,參考: https://github.com/steveklabnik/request_store安全
參考:
https://github.com/ruby-grape/grape-rabl/issues/37
https://ruby-china.org/topics/30188
https://stackoverflow.com/questions/9558192/thread-safety-class-variables-in-rubyruby