PassengerまたはMongrel経由でRailsを配備する場合、アプリケーションの複数のインスタンスが実行されています。ローカルファイルやリモートファイルへの書き込みなど、共有リソース上にミューテックスを確立するためのベストプラクティスまたはパターンとは何ですか?私は、2つのプロセスが同じリソースに同時に書き込まれないようにしたい。Mutex for Railsプロセス
5
A
答えて
14
は、各プロセスから排他的な書き込みロックを要求するFile#flock
メソッドを使用することができます。
fh = File.new("/some/file/path")
begin
fh.flock(File::LOCK_EX)
# ... write to the file here, or perform some other critical operation
ensure
fh.flock(File::LOCK_UN)
end
注:アンロックコールを置きますensure
ブロックは、ファイルをロックした後にキャッチされない例外がスローされた場合にデッドロックを防止するために重要です。
2
私が知る限り、このような環境でこれを行う唯一の方法は、ファイルベースのセマフォを使用することです。ロックファイルに触れ、作業を行い、ロックファイルを削除します。ファイルにロックがある場合、プロセスを失敗させます。
また、スレッドされたファイルに書き込みを行い、アプリケーションが直接ファイルを変更するのではなく、ファイルを修正するためにサービスと通信するようにすることもできます。
1
たとえば、delayed_job(http://github.com/tobi/delayed_job)のように、バックグラウンドジョブスケジューラを使用して実際の作業を行うことができます。あなただけ同時にファイルでの作業から複数の作家を防ぐために必要がある場合は
関連する問題
- 1. C++ 11プロセス間アトミックとmutex
- 2. pthreadsを使用したプロセス間mutex
- 3. mutexを使用した2つのプロセス間のIPCの調整
- 4. 別のプロセスのmutexへのハンドルを閉じる
- 5. product.number for user_id rails
- 6. フォームビルドUI for Rails?
- 7. バックグラウンドジョブマネージャfor Rails 3
- 8. regexp for rails logs
- 9. mobile_fu for Rails 4
- 10. Rails for Zombies - Labs
- 11. Rails Angularjs開発プロセス
- 12. C - mutex属性
- 13. TinyMCEとActiveAdmin for Rails
- 14. Salesforce Gem for Rails 3.1
- 15. Timetable App for Rails 4
- 16. Redis Charting for Railsアプリケーション
- 17. HTTPS for Railsアプリケーション - InvalidAuthenticityToken
- 18. SonarQube for Ruby Railsアプリケーション
- 19. Sinatra vs Rails for webservice
- 20. jquery autocomplete for rails application
- 21. Rails after_perform for ActionMailer :: DeliveryJob
- 22. WebOrb for Railsのインストール
- 23. CMS for Rails 4 + Ember.js
- 24. なぜmutexはmutexを必要としないのですか?mutexにはmutexが必要です...
- 25. プロセス間共有共有mutexを増やし、共有ミューテックスのプロセス間条件変数をブーストする
- 26. POSIX Cプログラム(MUTEXプログラム)
- 27. named Mutexの使い方
- 28. pthread mutexのオーバーヘッド?
- 29. boost :: mutexをクラス
- 30. mutex with PHP 5.3.8
優秀な説明。 –
ファイルがロックされているかどうかを確認するにはどうすればよいですか?私はグローバルロックとしてファイルを使用したい、#flockは私と一緒に見えますが、別のプロセスが使用可能かどうかを確認する必要があります、どうすれば解決できますか? –
@HarisKrajina、 'flock(File :: LOCK_EX | File :: LOCK_NB)'が 'false'を返した場合、ファイルはロックされます。ドキュメントについては、 'ri File.flock'を参照してください。 –