Using Passenger on OS X for Rails development
Lately a few things have been bugging me about Rails development using script/server. First, I can’t test through SSL and for applications who switch between SSL and non-SSL you really want your development environment too look as much like production as possible. And secondly, I have to manually manage my app server with script/server. This is a bit of a pain because some of our applications use ActiveResource to communicate so I need to start several app processes.
Proxying trough Apache solved the SSL problem, but now I had to remember on which ports I had to start my app server.
The solution turned out to be Passenger. First we install the passenger gem and compile mod_passenger.so.
$ gem install passenger
$ passenger-install-apache2-module
After that we turn on Apache at System Preferences ➔ Sharing ➔ Web Sharing and edit the webserver configuration. I added everything to /etc/apache2/users/manfred.conf but Apache doesn’t really care where you put it, just remember to load mod_passenger.so before using Passenger specific configuration options.
Set up the Passenger configuration as explained at the end of the install script.
LoadModule passenger_module /Library/Ruby/Gems/1.8/gems/passenger-1.0.1/ext/apache2/mod_passenger.so
RailsSpawnServer /Library/Ruby/Gems/1.8/gems/passenger-1.0.1/bin/passenger-spawn-server
RailsRuby /System/Library/Frameworks/Ruby.framework/Versions/1.8/usr/bin/ruby
Make sure our apps run in development mode.
RailsEnv development
Allow Apache serve files from our development directories.
<Directory "/Users/manfred/Code">
Order allow,deny
Allow from all
</Directory>
Finally, configure virtual hosts for our various projects.
NameVirtualHost *:80
<VirtualHost *:80>
DocumentRoot "/Users/manfred/Code/project1/public"
ServerName project1.local
</VirtualHost>
<VirtualHost *:80>
DocumentRoot "/Users/manfred/Code/project2/public"
ServerName project2.local
</VirtualHost>
Update: Adam Meehan has a short writup on how to connect ruby-debug to a Rails instance running in Passenger.
Comments
Add your comment
In order to fight spam on this blog, posting comments from a browser without javascript is currently not supported.
Subscribe
Simeon 1 day later: (delete)
Are you using leopard? I did this the other day, but I only get seg faults using the built in apache. I was really hoping this would be the silver bullet, but its giving my nothing but trouble :( ¶
Manfred Stienstra 1 day later: (delete)
Yeah, it's fine on a number of Leopard installs in our office, on my personal laptop I'm having segfaults too. Do you happen to have a case sensitive filesystem? ¶
Simeon 1 day later: (delete)
Nope, just the stock mac fs. Its odd how it picks and chooses :)
I dont feel like installing mac ports, which is what the folks I have seen using it have done. ¶
Tim Dysinger 1 day later: (delete | show email)
I installed it on my macbook, but I didn't use the Apple-installed Apache because of all the warning's saying don't do that in the installer.
Here's how I did it. http://dysinger.net/2008/04/14/installing-apache-and-mod_rails-on-mac-os-x-leopard/ ¶
Manfred Stienstra 1 day later: (delete)
Yeah, installing Apache would be a solution, but I would prefer it if it would work with OSX out of the box. It would be a shame to loose the simplicity of Passenger on OSX. ¶
Manfred Stienstra 15 days later: (delete)
Since 1.0.2 everything runs fine on OSX. ¶
topfunky 21 days later: (delete | show email)
I also had to edit /etc/hosts to add the app1.local and corresponding domains.
An added benefit is that pages that reference multiple dynamically generated resources will load much faster. I have reporting pages that generate 20+ graphics, and it was nearly unusable with a single Mongrel. Passenger spawns extra processes and works much faster, even in development. ¶
marcus 34 days later: (delete)
haha that was great. i was hesitant to switch on my dev box because i thought it'd be a pain (even though my experience w/ mod_rails elsewhere indicated otherwise). it took me 10 minutes and it works perfectly so far.
thanks for the writeup! ¶
Erwin 37 days later: (delete | show email)
great... running under 10.5.2..
only problem not yet solved, all images, javascript files, css files cannot be loaded , still with 0.0.0.0:3000
http://0.0.0.0:3000/images/pdmlogo.gif?1211129216
..
how can I fix it ? I tried to set RAILS_ROOT to mydomain.local, but then it failed...
thanks ¶
Erwin 37 days later: (delete | show email)
sorry .. got it.. solves this issue ... (I needed to think like an Apache... !)
config.action_controller.asset_host = "http://mydomain.local"
inserted in config/environments/development.rb ¶
Cameron 37 days later: (delete)
This installs perfectly on OS 10.5.2 with Passenger 1.0.5. Many thanks, I'm replacing mongrels asap... ¶
Manfred Stienstra 38 days later: (delete)
@Erwin, RAILS_ROOT is the root directory of the Rails project (ie. /Users/manfred/Code/my_rails_project) and has nothing to do with the domain.
Fixing the asset_host is indeed the right way to solve it. ¶
nick 40 days later: (delete | show email)
Is there any way to still use the debugger in this case? i.e. script/server -u ¶
Manfred Stienstra 40 days later: (delete)
@nick, no I don't think you can access the debugger. ¶
Brandon Martinez 61 days later: (delete | show email)
@nick: what are you using the debugger for? You could just use this if you are trying to debug your rails apps:
tail -f rails_app/log/development.log
That will give you live output from your rails app. ¶
Jamie Orchard-Hays 65 days later: (delete | show email)
Manfred, thanks for the helpful write-up. I have done this setup on my Mac (Leopard) and find that the first virtual host always wins--pointing at the second one always goes to the first. I'm wondering if anyone else has had this problem. My /etc/hosts file looks like:
127.0.0.1 localhost app.local app.admin
but it doesn't matter what I change the names to.
Thanks,
Jamie ¶
Jamie+Orchard-Hays 65 days later: (delete | show email)
Actually, the whole hosts file looks like:
127.0.0.1 localhost app.local app.admin
255.255.255.255 broadcasthost
::1 localhost
fe80::1%lo0 localhost ¶
Manfred Stienstra 67 days later: (delete)
Jamie, I don't really understand what you're talking about. ¶
Jamie+Orchard-Hays 68 days later: (delete | show email)
Manfred, never mind. I was missing
NameVirtualHost *:80 ¶
Sam 76 days later: (delete | show email)
Thanks for the write-up. I got everything running fine in under 5 minutes! ¶
Andrew Vit 80 days later: (delete)
Any way to specify a different environment than the predetermined "development" or "production"? ¶
Andrew Vit 80 days later: (delete)
Oops, that last comment was meant for the Passenger prefPane post... ¶
Manfred Stienstra 80 days later: (delete)
No, just development and production. ¶
pedz 102 days later: (delete | show email)
I'm not getting this to work for me. In the examples you have, what is the URL used to access a site? I assume it is:
http://project1.local/what/ever/...
I can't get that name to map to 127.0.0.1. I tried Top Funky's idea of adding it to /etc/hosts but then when I do:
host project1.local
I get:
Host project1.local.my.domain.com not found: 3(NXDOMAIN)
I'm running 10.5.4 ¶
Manfred Stienstra 102 days later: (delete)
Yes, you should be able to access the project through http://project1.local once you've added it to /etc/hosts or your DNS server. I'm afraid you don't really provide enough information for me to guess what's wrong though.
Note that 'host' doesn't know about /etc/hosts nor the OS X Directory Services. Sometimes a 'dscacheutil -flushcache' and a Safari restart helps when you have trouble resolving stuff. ¶
flax (salomon.valverde@gmail.com) 120 days later: (delete)
how do you get passenger to run your rails app in development mode? ¶
Manfred Stienstra 120 days later: (delete)
Using RailsEnv: http://www.modrails.com/documentation/Users%20guide.html#rails_env ¶
flax 120 days later: (delete)
hah!
RTFM right?
thanks much ¶
der_flo 138 days later: (delete)
A quick question:
Where goes the STDOUT and STDERR? I usually use "puts" in development and a cannot redirect these logs via the "ErrorLog" Apache directive. Any ideas? ¶
Manfred Stienstra 138 days later: (delete)
It's probably a good idea to use logger.debug instead and look at RAILS_ROOT/log/development.log. ¶
James 312 days later: (delete)
I get 403 (forbidden) errors on anything in my app's public folder, whether or not I have the following line in my config:
config.action_controller.asset_host = 'http://myapp.local' ¶
Manfred Stienstra 312 days later: (delete)
It means that you didn't allow people to read the public directory of you application. You control that in Apache with Allow and Deny statements in a Directory context. ¶
Jason O'Malley 363 days later: (delete)
Can anyone tell me what I would need to add to my Apache config to let me browse files via https on my local box? Doesn't Apache come with a certificate somewhere? Any help would be much appreciated. Thanks! ¶
Manfred Stienstra 363 days later: (delete)
Jason, please direct your questions to an Apache mailing list: http://httpd.apache.org/lists.html. ¶
Gabriel Rinaldi 454 days later: (delete | show email)
Do you have plans on supporting Snow Leopard? ¶
Manfred Stienstra 465 days later: (delete)
Gabriel, I'm not sure I understand what you mean. My instructions should work without much changes in Snow Leopard. ¶
Christer 538 days later: (delete | show email)
Installing passenger with gem install passenger on OSX 10.3.9 results in an error during make, as follows:
make
gcc -I. -I/usr/local/lib/ruby/1.8/powerpc-darwin7.3.1 -I/usr/local/lib/ruby/1.8/powerpc-darwin7.3.1 -I. -fno-common -g -O2 -fno-common -pipe -fno-common -c native_support.c
native_support.c: In function `send_fd':
native_support.c:66: error: storage size of `vec' isn't known
By manually removing the #ifdef __OpenBSD__ on line 33 in nativesupport.c, the sys/uio.h gets included and the make now runs without errors.
Problem is that the install should continue after the make in order to finish the installation, so my patch doesn' really solve the problem (just gives a hint to where the problem is).
Any suggestions? ¶
Manfred Stienstra 538 days later: (delete)
Christer, I don't think 10.3.9 is supported but if you really want to try to get it running please post a ticket at: http://code.google.com/p/phusion-passenger/issues/list. ¶
Christer 539 days later: (delete | show email)
Manfred,
Thanks. I will post a ticket. FYI, I finally just managed to get passenger up and running by doing a source code install and making the patch I mentioned in my first post (+ the same patch in one more file + setting an environment variable to indicate that the taget was osx 10.3). ¶