Routing Error with Passenger for Images and stylesheets


#1

Hi,

I updated my server with the latest Rails (2.3.2) and Passenger (2.2.2).
I also updated my Rails app to run under 2.3.2. It runs
fine locally under Mongrel.

The app is deployed into my own home directory under: (deployed via
Capistrano)
/users/me/public_html/myapp/current (which is a symlink to the
actual app)
and it’s accessed by the url:
http://myserver.com/myapp

I was getting routing errors, where Passenger/Apache could not find the
default route. But I found a post saying Passenger
has an issue with routing, so I added the RailsBaseURI to the
environment.rb file:

config.action_controller.relative_url_root = “/myapp”

I found another post that said my apache config should be:

<VirtualHost *:80>
ServerName myserver.com
DocumentRoot /home/me/public_html/myapp/current/public
<Directory “/home/me/public_html/myapp/current/public”>
Options FollowSymLinks
AllowOverride None
Order allow,deny
Allow from all

RailsBaseURI /

I have not .htaccess file in the public folder.

I am now able to get to the app, but all references to stylesheets and
images are giving routing errors in the
production.log file:

Processing ApplicationController#index (for 1.2.3.4 at 2009-05-30
13:11:46) [GET]

ActionController::RoutingError (No route matches
“/stylesheets/scaffold.css” with {:method=>:get}):
passenger (2.2.2) lib/phusion_passenger/rack/request_handler.rb:81:in
process_request' passenger (2.2.2) lib/phusion_passenger/abstract_request_handler.rb:203:inmain_loop’
passenger (2.2.2)
lib/phusion_passenger/railz/application_spawner.rb:340:in
start_request_handler' passenger (2.2.2) lib/phusion_passenger/railz/application_spawner.rb:298:inhandle_spawn_application’
passenger (2.2.2) lib/phusion_passenger/utils.rb:181:in safe_fork' passenger (2.2.2) lib/phusion_passenger/railz/application_spawner.rb:296:inhandle_spawn_application’
passenger (2.2.2) lib/phusion_passenger/abstract_server.rb:337:in
__send__' passenger (2.2.2) lib/phusion_passenger/abstract_server.rb:337:inmain_loop’
passenger (2.2.2) lib/phusion_passenger/abstract_server.rb:187:in
start_synchronously' passenger (2.2.2) lib/phusion_passenger/abstract_server.rb:154:instart’
passenger (2.2.2)
lib/phusion_passenger/railz/application_spawner.rb:192:in start' passenger (2.2.2) lib/phusion_passenger/spawn_manager.rb:257:inspawn_rails_application’
passenger (2.2.2)
lib/phusion_passenger/abstract_server_collection.rb:126:in
lookup_or_add' passenger (2.2.2) lib/phusion_passenger/spawn_manager.rb:251:inspawn_rails_application’
passenger (2.2.2)
lib/phusion_passenger/abstract_server_collection.rb:80:in synchronize' passenger (2.2.2) lib/phusion_passenger/abstract_server_collection.rb:79:insynchronize’
passenger (2.2.2) lib/phusion_passenger/spawn_manager.rb:250:in
spawn_rails_application' passenger (2.2.2) lib/phusion_passenger/spawn_manager.rb:153:inspawn_application’
passenger (2.2.2) lib/phusion_passenger/spawn_manager.rb:282:in
handle_spawn_application' passenger (2.2.2) lib/phusion_passenger/abstract_server.rb:337:insend
passenger (2.2.2) lib/phusion_passenger/abstract_server.rb:337:in
main_loop' passenger (2.2.2) lib/phusion_passenger/abstract_server.rb:187:instart_synchronously’

I’m at a loss as to how to fix this. Anyone?

Thanks!


#2

John T. wrote:

Hi,

I updated my server with the latest Rails (2.3.2) and Passenger (2.2.2).
I also updated my Rails app to run under 2.3.2. It runs
fine locally under Mongrel.

The app is deployed into my own home directory under: (deployed via
Capistrano)
/users/me/public_html/myapp/current (which is a symlink to the
actual app)
and it’s accessed by the url:
http://myserver.com/myapp

I was getting routing errors, where Passenger/Apache could not find the
default route. But I found a post saying Passenger
has an issue with routing, so I added the RailsBaseURI to the
environment.rb file:

Processing ApplicationController#index (for 1.2.3.4 at 2009-05-30
13:11:46) [GET]

ActionController::RoutingError (No route matches
“/stylesheets/scaffold.css” with {:method=>:get}):

Hate to bump my own post, but I really could use some input… nothing
I’ve tried works.

Thanks.


#3

On May 31, 2009, at 8:30 AM, John T. wrote:

/users/me/public_html/myapp/current (which is a symlink to the

I’ve tried works.

Thanks.

You didn’t say what server you were using, but you need to point
passenger to your public directory, not RAILS_ROOT as described
here:
http://www.modrails.com/documentation/Users%20guide%20Apache.html#_deploying_to_a_virtual_host_8217_s_root

The Apache VirtualHost section they use as an example is:

<VirtualHost *:80>
ServerName www.mycook.com
DocumentRoot /weebapps/mycook/public

They have a section on nginx if that’s the server you are using.

Hope this helps.


#4

Steve R. wrote:

You didn’t say what server you were using, but you need to point
passenger to your public directory, not RAILS_ROOT as described
here:
http://www.modrails.com/documentation/Users%20guide%20Apache.html#_deploying_to_a_virtual_host_8217_s_root

The Apache VirtualHost section they use as an example is:

<VirtualHost *:80>
ServerName www.mycook.com
DocumentRoot /weebapps/mycook/public

They have a section on nginx if that’s the server you are using.

Hope this helps.

Oh, yeah, thought the config file would make it obvious. It’s Apache
with Passenger. And I am pointing to the public directory:

Directory "/home/me/public_html/myapp/current/public


#5

John T. wrote:

Oh, yeah, thought the config file would make it obvious. It’s Apache
with Passenger. And I am pointing to the public directory:

Directory "/home/me/public_html/myapp/current/public

With thanks to Hongli L. over on the Phusion Passenger Google Group, I
got this sorted out. And for completeness and to help others this is
what I did.

I set up a new directory under /var/www:

/var/www/myapp

and created a symlink from there to my app’s public folder:

ln -s /home/me/public_html/myapp/current/public myapp

and changed my apache vhost file to be:

<VirtualHost *:80>
ServerName myserver.com
DocumentRoot /var/www/myapp
<Directory “/var/www/myapp”>
Options FollowSymLinks
AllowOverride None
Order allow,deny
Allow from all

RailsBaseURI /myapp

and made sure to include:

config.action_controller.relative_url_root = ‘/myapp’

in my environment.rb file.

Hongli’s description:

/var/www/myapp should be a directory. Inside this
directory there should be a ‘myapp’ symlink. Like this:

/var/www/myapp/
/var/www/myapp/myapp -> /home/me/public_html/myapp/current/public

When you say “RailsBaseURI /something”, then Phusion Passenger will
look for a filesystem entry “$DOCUMENT_ROOT/something”, and this
must be a symlink to the ‘public’ directory of your Rails app.

Hope this helps someone else!

jt