* unicorn prerelease 0.990.0.5.gbfb1
@ 2010-06-08 22:36 7% Eric Wong
0 siblings, 0 replies; 3+ results
From: Eric Wong @ 2010-06-08 22:36 UTC (permalink / raw)
To: unicorn list
Hi all,
I decided to try out the prerelease feature of Rubygems
for the first time, it seems to work...
So yes, "gem install --pre unicorn" if you're using Rails 3
(and probably like to type 'rm config.ru' :>)
Same list of changes since v0.990.0:
Eric Wong (4):
t0300: Rails 3 test actually uses unicorn_rails
tests: libify common rails3 setup code
unicorn_rails: fix requires for Ruby 1.9.2
tests: add Rails 3 test for the missing config.ru case
Hongli Lai (Phusion) (1):
Fix unicorn_rails compatibility with the latest Rails 3 code
--
Eric Wong
_______________________________________________
Unicorn mailing list - mongrel-unicorn@rubyforge.org
http://rubyforge.org/mailman/listinfo/mongrel-unicorn
Do not quote signatures (like this one) or top post when replying
^ permalink raw reply [relevance 7%]
* Re: unicorn_rails cleanup (possible fix for Rails3) pushed
@ 2010-06-08 20:55 6% ` Eric Wong
0 siblings, 0 replies; 3+ results
From: Eric Wong @ 2010-06-08 20:55 UTC (permalink / raw)
To: unicorn list; +Cc: Hongli Lai
Hongli Lai <hongli@phusion.nl> wrote:
> On Tue, Jun 8, 2010 at 9:20 PM, Eric Wong <normalperson@yhbt.net> wrote:
> > Thanks Hongli, so this only affects people who remove the
> > config.ru that Rails 3 creates for them? Yikes...
>
> No. The problem even occurs if you already have config.ru. But the
> thing is, Rails 3 has deprecated ActionController::Dispatcher a few
> weeks ago and replaced it with a stub. Rails::Rack::Static changed its
> interface and must be constructed differently. The only way to obtain
> a valid Rack endpoint for the app seems to be parsing
> config/application.rb
Actually, I made "unicorn_rails" completely bypass the "rails_builder"
method if there's a config.ru, so it should never hit the
ActionController::Dispatcher stuff.
> > Let me know if the edited patch below looks alright to you.
>
> Yes it looks fine. A bit overcomplicated regexp compared to using
> 'strip' but whatever works. :)
I just kept the regexp as-is, works for me.
I just managed to push this to git://git.bogomips.org/unicorn.git before
my Internet connection died on me earlier today. I've beefed up the
tests a bit but will probably do more later.
Eric Wong (4):
t0300: Rails 3 test actually uses unicorn_rails
tests: libify common rails3 setup code
unicorn_rails: fix requires for Ruby 1.9.2
tests: add Rails 3 test for the missing config.ru case
Hongli Lai (Phusion) (1):
Fix unicorn_rails compatibility with the latest Rails 3 code
Thanks again!
--
Eric Wong
_______________________________________________
Unicorn mailing list - mongrel-unicorn@rubyforge.org
http://rubyforge.org/mailman/listinfo/mongrel-unicorn
Do not quote signatures (like this one) or top post when replying
^ permalink raw reply [relevance 6%]
* Re: unicorn_rails cleanup (possible fix for Rails3) pushed
@ 2010-06-08 19:20 5% ` Eric Wong
0 siblings, 1 reply; 3+ results
From: Eric Wong @ 2010-06-08 19:20 UTC (permalink / raw)
To: unicorn list; +Cc: Hongli Lai
Hongli Lai <hongli@phusion.nl> wrote:
> Hi Eric.
>
> It would appear that recent Rails 3 changes have broken unicorn_rails,
> just like they broke Phusion Passenger. Here's a patch which fixes the
> problem.
> http://gist.github.com/429944
Thanks Hongli, so this only affects people who remove the
config.ru that Rails 3 creates for them? Yikes...
A few comments:
+ if ::Rails::VERSION::MAJOR >= 3 && ::File.exist?('config/application.rb')
+ ::File.read('config/application.rb') =~ /^module (.+)$/
Maybe a more flexible regexp like this: /^module\s+([\w:]+)\s*$/ (or
maybe even starting with: "^\s*") would be more reliable for folks who
leave extra spaces around.
Unfortunately, Ruby is not Python :)
@@ -148,9 +167,9 @@ def rails_builder(daemonize)
else
use Rails::Rack::LogTailer unless daemonize
use Rails::Rack::Debugger if $DEBUG
+ use Rails::Rack::Static, map_path
map(map_path) do
- use Rails::Rack::Static
- run ActionController::Dispatcher.new
+ run rails_dispatcher
Changing the call to use Rails::Rack::Static there is wrong. map_path
is the URI prefix (RAILS_RELATIVE_URL_ROOT) and not the static file
path we serve from. It appears the deprecation in Rails 3 broke some
things and ActionDispatch::Static is configured slightly differently.
Let me know if the edited patch below looks alright to you.
I'll also push out a few Rails 3 tests that exercise the missing
config.ru cases.
>From 222ae0a353eda446a480e5c4b473a218304f9594 Mon Sep 17 00:00:00 2001
From: Hongli Lai (Phusion) <hongli@phusion.nl>
Date: Tue, 8 Jun 2010 13:22:25 +0200
Subject: [PATCH] Fix unicorn_rails compatibility with the latest Rails 3 code
This allows us to properly detect Rails 3 installations
in cases where config.ru is not present.
[ew: expanded commit message
fixed static file serving,
more flexible regexp for matching module ]
ref: mid.gmane.org/AANLkTiksBxIo_PFWoiPTWi1entXZRb7D2uE-Rl7H3lbw@mail.gmail.com
Acked-by: Eric Wong <normalperson@yhbt.net>
---
bin/unicorn_rails | 26 ++++++++++++++++++++++++--
1 files changed, 24 insertions(+), 2 deletions(-)
diff --git a/bin/unicorn_rails b/bin/unicorn_rails
index 45a9b11..ed235ba 100755
--- a/bin/unicorn_rails
+++ b/bin/unicorn_rails
@@ -109,6 +109,24 @@ end
ru = ARGV[0] || (File.exist?('config.ru') ? 'config.ru' : nil)
+def rails_dispatcher
+ if ::Rails::VERSION::MAJOR >= 3 && ::File.exist?('config/application.rb')
+ if ::File.read('config/application.rb') =~ /^module\s+([\w:]+)\s*$/
+ app_module = Object.const_get($1)
+ begin
+ result = app_module::Application
+ rescue NameError
+ end
+ end
+ end
+
+ if result.nil? && defined?(ActionController::Dispatcher)
+ result = ActionController::Dispatcher.new
+ end
+
+ result || abort("Unable to locate the application dispatcher class")
+end
+
def rails_builder(daemonize)
# this lambda won't run until after forking if preload_app is false
lambda do ||
@@ -149,8 +167,12 @@ def rails_builder(daemonize)
use Rails::Rack::LogTailer unless daemonize
use Rails::Rack::Debugger if $DEBUG
map(map_path) do
- use Rails::Rack::Static
- run ActionController::Dispatcher.new
+ if defined?(ActionDispatch::Static)
+ use ActionDispatch::Static, "#{Rails.root}/public"
+ else
+ use Rails::Rack::Static
+ end
+ run rails_dispatcher
end
end
end.to_app
--
Eric Wong
_______________________________________________
Unicorn mailing list - mongrel-unicorn@rubyforge.org
http://rubyforge.org/mailman/listinfo/mongrel-unicorn
Do not quote signatures (like this one) or top post when replying
^ permalink raw reply related [relevance 5%]
Results 1-3 of 3 | reverse | options above
-- pct% links below jump to the message on this page, permalinks otherwise --
2010-06-08 12:24 unicorn_rails cleanup (possible fix for Rails3) pushed Hongli Lai
2010-06-08 19:20 5% ` Eric Wong
2010-06-08 19:25 ` Hongli Lai
2010-06-08 20:55 6% ` Eric Wong
2010-06-08 22:36 7% unicorn prerelease 0.990.0.5.gbfb1 Eric Wong
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).