2011-03-26 2 views
14

레일 환경을로드하는 사용자 지정 데몬을 만들려고합니다. 내 환경은 다음과 같다 : 루비 1.9.2-P180 레일레일 3 사용자 지정 데몬

3.0.5 I 한 다음

는 데몬 보석을 -Installed

-Installed daemon_generator 플러그인은 여기 : 를

https://github.com/dougal/daemon_generator이 데몬을 -Generated : 레일 데몬 리스너

를 생성하는 모든이 괜찮 았는데. 데몬을 실행하면 작동합니다.

그러나 사용자를 검색하는 등의 활성 레코드 개체에 액세스하자 마자 불어납니다.

*** below you find the most recent exception thrown, this will be likely (but not certainly) the exception that made the application exit abnormally *** 
#<NameError: method `recognize' not defined in Rack::Mount::RouteSet> 
*** below you find all exception objects found in memory, some of them may have been thrown in your application, others may just be in memory because they are standard exceptions *** 
#<NoMemoryError: failed to allocate memory> 
#<SystemStackError: stack level too deep> 
#<fatal: exception reentered> 
#<NoMethodError: undefined method `eq' for nil:NilClass> 
#<NameError: method `recognize' not defined in Rack::Mount::RouteSet> 

Rails 3.0.5를로드하는 데몬을 만드는 방법에 대한 의견이 있으십니까?

내 delayed_job 데몬 스크립트와 config.ru 보면 그들이 잘못된 순서로 일을로드 나타납니다 https://github.com/dougal/daemon_generator/blob/master/lib/generators/daemon/templates/script.rb의 코드를 보면

+0

여기에도 같은 오류가 있습니다. 나는 데몬을 그대로 돌릴조차 수 없다. 나는 ree-1.8.7-2011.03을 사용하고 있습니다. 도움이되지 않아서 미안해. – Jaryl

+0

rvm ruby-1.9.2-p136 및 3.0.7 레일을 사용하여 동일한 오류가 발생합니다. 혹시 해결책을 찾았습니까? –

답변

16

내가 내 자신의 레일을 데몬 컨트롤러를 출시하는 것을 선호 컨트롤러를 중지하고있다. 여기에 대부분의 경우에 작동하는 간단한 예입니다

스크립트/데몬은

#!/usr/bin/env ruby 
require 'rubygems' 
require 'daemons' 

ENV["APP_ROOT"] ||= File.expand_path("#{File.dirname(__FILE__)}/..") 
ENV["RAILS_ENV_PATH"] ||= "#{ENV["APP_ROOT"]}/config/environment.rb" 

script = "#{ENV["APP_ROOT"]}/daemons/#{ARGV[1]}" 

Daemons.run(script, dir_mode: :normal, dir: "#{ENV["APP_ROOT"]}/tmp/pids") 

데몬/your_daemon_script.rb

require ENV["RAILS_ENV_PATH"] 
loop { 
    ... your code ... 
} 

다음과 같은 명령을 사용하여 deamons 제어 할 수 있습니다

script/daemon run your_daemon_script.rb 
script/daemon start your_daemon_script.rb 
script/daemon stop your_daemon_script.rb 

이렇게하면 새로운 데몬을 쉽게 추가 할 수 있으며 ra를 쉽게로드 할 수 있습니다. 필요한 경우 각 스크립트에 ils.

+0

왜 루비 데이터가 필요한가? –

1

... 그들은 설정/environment.rb에 (회전 부하에 응용 프로그램을로드. RB 및 초기화 응용 프로그램)

그래서 가능한 수정 생성 된 스크립트를 편집하고는이 시도 I '설정/environment.rb에'

필요로하게 될 것이다 :

#!/usr/bin/env ruby 

# You might want to change this 
ENV["RAILS_ENV"] ||= "development" 

require File.dirname(__FILE__) + "/../config/environment" 

$running = true 
Signal.trap("TERM") do 
    $running = false 
end 

while($running) do 

    # Replace this with your code 
    Rails.logger.auto_flushing = true 
    o = Order.last 
    Rails.logger.info "The latest order is #{o.id}" 

    sleep 10 
end 

오류가 발생하지 않았습니다. (레일즈 3.0.3 및 3.0.5 모두 시도)

+0

재미있는 루비 버전을 사용하고 계십니까? 나는 이것을 정확하게 시험해 보았고 rvm ruby-1.9.2-p136 및 3.0.7 레일을 사용하여 원래의 포스터 오류를 얻었다. –

0

내 스테이징 서버 (레일 3.0.7, 루비 1.8.7, 승객)에서 데몬을 실행하는 데 문제가있었습니다. 3.0.0). 나도

은 (FILE) + "/../../config/application" Rails.application.require_environment을 File.dirname이 필요하지 않습니다!

는 File.dirname (FILE) + "/../config/environment"근무

을 필요로한다.

rails root에 표준 config.ru를 다시 설치하여 문제를 해결했습니다. 승객을 통합하기 위해 설치를 제거 했으니 까 ... 이제는 승객 데몬 &을 어떻게 사용하게 될지 확실하지 않습니다.)

1

나는 daemon_generator가 작동하는 데 많은 어려움을 겪고있다. daemon_generator를 모두 건너 뛰고 데몬 gem (v1.1.3) 만 사용하여 내 데몬을 작동 시켰습니다. (루트 루비 응용 프로그램 디렉토리에) urserver_control.rb에서

: urserver에서

 
    #!/usr/bin/env ruby 
    require 'rubygems' 
    require 'daemons' 
    require 'TweetMsg' 

    Daemons.run('urserver.rb') 

.RB :

 
#!/usr/bin/env ruby 
require File.expand_path(File.join(File.dirname(__FILE__), 'config', 'environmen 
t')) 
require "rubygems" 

    --- insert your code here --- 

직접 ruby urserver.rb 또는 ruby urserver_controller run 을 서버를 실행하여 테스트 할 수 있습니다 그리고 그 일단 시작하고 ruby urserver_control.rb {start | stop | run }

+0

이것이 내가 한 것인데 – ckarbass