Daemonizing Mailman app

663 views Asked by At

Starting my mailman app by running rails runner lib/daemons/mailman_server.rb works fine.

When starting with my daemon script and command bundle exec rails runner script/daemon run mailman_server.rb, the script generates an error:

.rvm/gems/ruby-1.9.3-p194/gems/mailman-0.5.3/lib/mailman/route/conditions.rb:21:in `match': undefined method `each' for nil:NilClass (NoMethodError)

My code is as follows:

lib/daemons/mailman_server.rb

require 'mailman'

# Config Mailman
Mailman.config.ignore_stdin = false
Mailman.config.graceful_death = true
Mailman.config.poll_interval = 15
Mailman.config.logger = Logger.new File.expand_path("../../../log/mailman.log", __FILE__)

Mailman.config.pop3 = {
  :username => '[email protected]',
  :password => 'password',
  :server   => 'pop.gmail.com',
  :port     => 995,
  :ssl      => true
}

# Run the mailman
Mailman::Application.run do
  from('%email%').to('alias+q%id%@mygoogleapp.com') do |email, id|
    begin
      # Get message without headers to pass to add_answer_from_email
      if message.multipart?
        reply = message.text_part.body.decoded
      else
        reply = message.body.decoded
      end

      # Call upon the question to add answer to his set
      Question.find(id).add_answer_from_email(email, reply)
    rescue Exception => e
      Mailman.logger.error "Exception occured while receiving message:\n#{message}"
      Mailman.logger.error [e, *e.backtrace].join("\n")
    end
  end
end

and my script/daemon file is:

#!/usr/bin/env ruby
require 'rubygems'
require "bundler/setup"
require 'daemons'

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

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

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

Any insight as to why it fails as a daemon?

0

There are 0 answers