In unserer Multi-Tenant Rails 4.2 App möchten wir einen lokalen Thread current_token
für User
Modell definieren und beabsichtigen, es durch die ganze App zu verwenden. Hier ist die, wie die current_token
definiert:Wie sicher ist der lokale Thread in Rails?
class User < ActiveRecord::Base
def self.current_token=(token)
Thread.current['current_token'] = token
end
def self.current_token
Thread.current['current_token']
end
end
Das Token wird mit User.current_token
abgerufen. Es ist wichtig, Thread während der gesamten Lebensdauer einer Benutzersitzung sicher und lebendig zu halten. Es wird darauf hingewiesen, dass der lokale Thread von einigen Webservern wie puma
gelöscht werden kann. Wir würden gerne ein Feedback von der Community bekommen, wie Sound lokal in der realen Produktion ist. Welche Art von Problem sollten wir beachten (und mögliche Lösung, falls es eine gibt). Vielen Dank.
Die Übertragung eines alten Token nach thread.current ist ein echtes Problem. Wenn 'thread.current' in 'before_action' gelöscht und zurückgesetzt wird und in einer' after_action' in einem Controller gelöscht wird, wird das Risiko beseitigt? – user938363
Meistens, aber Sie müssen auch über die Middleware nachdenken. Sehen Sie sich einmal an, wie das [RequestStore-Juwel] (https://github.com/steveklabnik/request_store/blob/master/lib/request_store/middleware.rb) dies handhabt. – spickermann
Ersetzt das Anforderungsspeicher-Juwel 2 Probleme in Ihrem Beitrag? Ich möchte nur bestätigen. Ich habe ein paar Post über RequestStore gem gelesen und war mir nicht ganz sicher, was die Verwendung des Edelsteins betrifft. Danke vielmals. – user938363