2014-11-15 8 views
0

나는 설정이 백그라운드 프로세스 및 이벤트의 술집/서브에 대한 ResqueBus을 처리하는 슈퍼 멋진 Resque 사용하여 대부가 버스 응용 프로그램입니다.에게 대부를 통해 resque 풀을 설정 Rakefile 던지는 오류가

ResqueBus 설치 프로그램은 작업 할 리 큐와 작업자를 만듭니다. 여기까지는 모두 잘 작동합니다. 이제 resquebus는 단일 대기열에 대해 단일 작업자 만 생성하므로 많은 이벤트가 게시되고 가입되므로 내 버스 응용 프로그램의 프로세스가 엉망이 될 수 있습니다. 따라서 응용 프로그램 대기열 당 하나의 작업자가 비효율적 인 것으로 보입니다. 그래서 작업자 프로세스를 처리하기 위해 resque-pool gem을 통합하는 것을 고려했습니다.

나는 resque pool gem이 지정한 모든 프로세스를 따라 왔습니다. Rakefile을 편집했습니다.

# Add your own tasks in files placed in lib/tasks ending in .rake, 
# for example lib/tasks/capistrano.rake, and they will automatically be available to Rake. 

require File.expand_path('../config/application', __FILE__) 

Ojus::Application.load_tasks 

require 'resque/pool/tasks' 

# this task will get called before resque:pool:setup 
# and preload the rails environment in the pool manager 

task "resque:setup" => :environment do 
    # generic worker setup, e.g. Hoptoad for failed jobs 
end 

task "resque:pool:setup" do 

    # close any sockets or files in pool manager 

    ActiveRecord::Base.connection.disconnect! 
    # and re-open them in the resque worker parent 
    Resque::Pool.after_prefork do |job| 
    ActiveRecord::Base.establish_connection 
    end 

end 

지금 나는이 resque 풀 명령을 실행했습니다.

resque-pool --daemon --environment production 

이이 같은 오류가 발생합니다.

/home/ubuntu/.rvm/gems/[email protected]/gems/activerecord-4.1.7/lib/active_record/connection_adapters/connection_specification.rb:257:in`resolve_symbol_connection ':'default_env '데이터베이스가 구성되지 않았습니다. 사용 가능한 : [: 개발 : 생산, : 시험] (액티브 :: AdapterNotSpecified는)

나는이 디버깅을 시도하고 지금은 제거한이를 위해 라인

ActiveRecord::Base.connection.disconnect! 

에서 오류가 발생합니다 것을 발견 라인 및 모든 잘 작동하는 것. 그러나 우리가 padrino 응용 프로그램을 다시 시작하면 이전 ActiveRecord 연결이 끊어지기 때문에 문제가 발생할 수 있습니다.

**

난 그냥 거기에이 문제에 대한 주위에 어떤 일을하고 모든 액티브 연결을 닫아 resque 풀 명령을 실행하는 경우 알고 싶어

.

**

답변

1

당신이 대부가 당신의 database.rb 파일을 준 경우가 도움이되었을 것이다.

신경 쓰지 마시고, ActiveRecord :: Base.connection.disconnect 대신 defined?(ActiveRecord::Base) && ActiveRecord::Base.connection.disconnect! 을 사용해보세요!

대신 액티브 :: Base.establish_connection()의

ActiveRecord::Base.establish_connection(ActiveRecord::Base.configurations[Padrino.env]) 

당신이 매개 변수를 전달해야 액티브와의 연결을 설정하는 당신이 그렇지 않으면 '를 검색합니다 연결하고 싶은 환경 default_env '이며 이는 activerecord에 기본값입니다. 소스 코드를 체크 아웃 source code