unicorn Ruby/Rack server user+dev discussion/patches/pulls/bugs/help
 help / color / mirror / code / Atom feed
From: Eric Wong <normalperson@yhbt.net>
To: unicorn list <mongrel-unicorn@rubyforge.org>
Cc: "godfat 真常" <godfat@gmail.com>
Subject: Re: About Unicorn Rack handler
Date: Wed, 4 Nov 2009 09:07:15 -0800	[thread overview]
Message-ID: <20091104170714.GC5282@dcvr.yhbt.net> (raw)
In-Reply-To: <56e58d960911040437g12cb6291rb19c2fe21cae834@mail.gmail.com>

"Lin Jen-Shin (aka godfat 真常)" <godfat@godfat.org> wrote:
> Hi,
> 
> A couple days ago, I was trying to run Unicorn for Ramaze,
> and found that `Unicorn.run' didn't share the same interface
> with other Rack handlers, i.e. `options[:Host]' and `options[:Port]'
> 
> Because of this, I can't just use:
> 
>   Rack::Handler.register('unicorn', 'Unicorn')
> 
> And invoke this:
> 
>   Ramaze.start(:adapter => 'unicorn', :port => 8080)
> 
> To address this, I added a simple wrapper in
> Innate (which is the core of Ramaze):
> 
> http://github.com/godfat/innate/commit/9d607f41fdeeca366a9a07155e685ae2605c7025
> 
> In short, simply hack the config to:
> 
>   {:listeners => ["#{config[:Host]}:#{config[:Port]}"]}
> 
> Should we adapt to this interface in Unicorn::Configurator,
> or provide an additional Rack handle to adapt to this,
> or maintain this Rack handler in Rack repository, just like the others?
> http://github.com/rack/rack/tree/master/lib/rack/handler

I think making Unicorn.run add to :listeners if :Host or :Port are set
will work.  I'm not sure if launching Unicorn directly from `rackup' can
ever work right without being too intrusive to the other servers, so
having a Unicorn Rack handler in distributed with Rack would't make
sense.   Unicorn needs to capture ARGV (before option parsing) and parse
its own config file, neither of which is doable out-of-the-box with
rackup.

Does something like this work? (not tested).

diff --git a/lib/unicorn.rb b/lib/unicorn.rb
index 0f2b597..d4a00e0 100644
--- a/lib/unicorn.rb
+++ b/lib/unicorn.rb
@@ -17,6 +17,14 @@ module Unicorn
 
   class << self
     def run(app, options = {})
+      # compatibility with other interfaces (Ramaze)
+      host = options.delete(:Host)
+      port = options.delete(:Port)
+      if host || port
+        port ||= Const::DEFAULT_PORT
+        host ||= Const::DEFAULT_HOST
+        (options[:listeners] ||= []) << "#{host}:#{port}"
+      end
       HttpServer.new(app, options).start.join
     end
   end

On the other hand, does Innate make it possible to do transparent
upgrades (since rackup does not)?  I'll look into it a bit more later...

-- 
Eric Wong
_______________________________________________
mongrel-unicorn mailing list
mongrel-unicorn@rubyforge.org
http://rubyforge.org/mailman/listinfo/mongrel-unicorn

  reply	other threads:[~2009-11-04 17:07 UTC|newest]

Thread overview: 8+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2009-11-04 12:37 About Unicorn Rack handler Lin Jen-Shin (aka godfat 真常)
2009-11-04 17:07 ` Eric Wong [this message]
2009-11-05  4:43   ` Lin Jen-Shin (aka godfat 真常)
2009-11-05  4:47     ` Lin Jen-Shin (aka godfat 真常)
2009-11-05  7:29       ` Eric Wong
2009-11-05  7:28     ` Eric Wong
2009-11-05 15:13       ` Lin Jen-Shin (aka godfat 真常)
2009-11-05 23:19         ` Eric Wong

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

  List information: https://yhbt.net/unicorn/

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=20091104170714.GC5282@dcvr.yhbt.net \
    --to=normalperson@yhbt.net \
    --cc=godfat@gmail.com \
    --cc=mongrel-unicorn@rubyforge.org \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
Code repositories for project(s) associated with this public inbox

	https://yhbt.net/unicorn.git/

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for read-only IMAP folder(s) and NNTP newsgroup(s).