2009-04-05 3 views
2

environment.rb에 스레드 객체를 만들고 일부 컨트롤러의 다른 동작에서 사용하고 싶습니다.RoR에서 environment.rb에 정의 된 변수에 액세스하는 방법은 무엇입니까?

어떻게해야합니까?

미리 감사드립니다.


실제로 저는 일부 데이터를 가져 와서 데이터베이스에 저장하는 세 개의 프로세스가 영구적으로 실행되기를 원합니다. 그것이 내가 쓰레드를 사용하는 이유입니다. 그렇게 할 수있는 다른 방법이 있습니까?

답변

0

매우주의하십시오. 내가 아는 한, 레일은 스레드로부터 안전하지 않습니다. 그리고 모든 마술 (실례지만, "메타 프로그래밍")에 직면하여 안전하게 스레드를 사용하려고하면 모두 빠져 나올 때 위험한 것처럼 들립니다.

어째서 스레드 개체를 원하십니까?

댓글에 대한 응답으로 레일스는 thread safe 인 might not mean as much as you think입니다. 내가 필요가 없다면 나는 그것을 의지 할 것입니다.

+0

2.2 이후 레일스는 thread로부터 안전합니다. –

3

초기 질문에 답하기 위해 environment.rb에 선언 된 상수는 전체 코드베이스에서 사용할 수 있습니다. 가능하면 그렇게하지 마십시오. 이것은 구성 스파게티 꽤 빨리 될 수 있습니다.

더 넓게, Rails는 버전 2.2부터 스레드로부터 안전하지만 (특히 MRI에서는) 동시 스레드를 제공하는 방법으로는 여전히 드문 반면 MRI의 녹색 스레드는 특히 중요하지 않습니다 도움이됩니다. Starling과 같은 메시지 큐를 사용하여 다른 Ruby 프로세스를 회전시켜 비동기 작업을 수행하는 것이 좋습니다.

+0

어떤 사람들은 그것을 thread safe라고 부릅니다. 나는 적어도이 의미에서는 그렇지 않다. 코너 케이스가 너무 많습니다. – MarkusQ

0

Brian이 말한 것 이외에 initializer (config/initializers를 실행시켜야 함)를 사용하는 것을 고려해보십시오. 나는 그것이 environment.rb를 사용하는 것보다 더 명확한 의도라고 생각한다.

관련 문제