Railsプロセス内にNeo4jグラフデータベースを埋め込むNeo4j.rb上で実行しているため、スレッド化されたRailsアプリを作成する必要があります。したがって、同じプロセスからの複数のリクエストを処理する必要があります。ええ、Neo4jデータベースへの接続がSQLデータベースのように機能するのは素晴らしいことですが、そうではないので、文句を言うのをやめて、それを使用します。
私は並行コードを書くことの意味についてかなり心配しています(私がそうあるべきです)、そして一般的な一般的なシナリオを処理する方法についてのアドバイスが必要です-コントローラーがインスタンス変数またはセッションハッシュの変数を設定し、次にいくつかのもの起こります。私が何を意味するかを示すために、次の大まかなコードを検討してください。
# THIS IS NOT REAL PRODUCTION CODE
# I don't do this in real life, it is just to help me ask my question, I
# know about one-way hashing, etc.!
class SessionsController
def create
user = User.find_by_email_and_password(params[:email], params[:password])
raise 'auth error' unless user
session[:current_user_id] = user.id
redirect_to :controller => 'current_user', :action => 'show'
end
end
class CurrentUserController
def show
@current_user = User.find(session[:current_user_id])
render :action => :show # .html.erb file that uses @current_user
end
end
質問:このコードに競合状態はありますか?
SessionsControllerでは、session
ハッシュとparams
ハッシュはスレッドローカルですか?同じブラウザセッションが異なる資格情報を使用して/sessions#create(Railsルート構文を借用するため)に複数のリクエストを行うとすると、ログインしているユーザーはsession[:current_user_id] = user.id
最後にラインに到達したリクエストである必要がありますか?または、コントローラーアクションの周りにミューテックスロックをラップする必要がありますか?
CurrentUserControllerで、異なるセッションの2つのリクエストが同時にshowアクションにヒットした場合、同じ@current_user変数が両方によって設定されますか?つまり、最初のリクエストは.html.erbファイルを処理しているときに、@ current_userインスタンス変数が2番目のスレッドによって突然変更されたことを検出しますか?
ありがとう