Passenger 또는 Mongrel을 통해 레일을 배치 할 때 응용 프로그램의 여러 인스턴스가 실행 중입니다. 로컬 파일이나 원격 파일에 쓰기와 같은 공유 리소스에 뮤텍스를 설정하는 가장 좋은 방법 또는 패턴은 무엇입니까? 두 프로세스가 같은 리소스에 동시에 쓰지 않도록하고 싶습니다.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. Netbeans Intellisense for Rails
- 2. Lightbox for rails?
- 3. rails 캐싱 for application.rb
- 4. CONCAT_WS for Rails?
- 5. WebOrb for Rails 설치
- 6. SQL Server Adapter for Rails
- 7. Ruby on Rails for JavaScript
- 8. PDF Writer for Rails 3
- 9. 양식 빌딩 UI for Rails?
- 10. Rails Helper for user 그림
- 11. named_scope for date.today Rails 2.3.9
- 12. Vista의 Mutex 개체 정보
- 13. Mutex in Python Twisted
- 14. POSIX C 프로그래밍 (MUTEX 프로그램)
- 15. Rails 2.3.2에서 Ruby 1.8.6을 Rails 2.3.5로 업그레이드 Ruby 1.8.7 초기화되지 않은 상수 ActiveSupport :: Dependencies :: Mutex (NameError)
- 16. Java JAXP 또는 Xerces2 for XML 프로세스?
- 17. 초기화되지 않은 상수 ActiveSupport :: Dependencies :: Mutex
- 18. posix 프로세스 간 세마포어 이해하기
- 19. ruby on rails 백그라운드에서 콘솔 프로세스
- 20. Prawn & Prawnto for Rails PDF 생성 사용하기
- 21. Amazon Web Services for Rails 설정
- 22. PHP QuickForm for Ruby on Rails
- 23. JRuby for Rails 3를 사용할 준비가 되었습니까?
- 24. 아약스를 통해 Google-Maps-for-Rails 센터지도
- 25. HoboFields Pre-Release for Rails 3 설치
- 26. youtube api for Ruby on Rails
- 27. Rails Path Helper for root는 "/"를 출력해야합니다.
- 28. Karma/Reputation Plugin for Ruby on Rails?
- 29. Amazon S3 Gem for Rails 2.3?
- 30. boost :: mutex, pthread_mutex_destroy failed - 디버깅 제안 사항?
우수 설명. –
파일이 잠겨 있는지 확인하려면 어떻게합니까? 전역 잠금으로 파일을 사용하고 싶습니다. #flock은 나에게 잘 보이지만 다른 프로세스가 사용 가능한지 확인해야합니다. 어떻게 해결합니까? –
@HarisKrajina,'flock (File :: LOCK_EX | File :: LOCK_NB)'이'false'를 반환하면 파일이 잠 깁니다. 문서의 경우,'ri File.flock'을 참조하십시오. –