Forum: Ruby on Rails Routing Error with Passenger for Images and stylesheets

Announcement (2017-05-07): www.ruby-forum.com is now read-only since I unfortunately do not have the time to support and maintain the forum any more. Please see rubyonrails.org/community and ruby-lang.org/en/community for other Rails- und Ruby-related community platforms.
32b703cdb0ea03c3939b97a93205414f?d=identicon&s=25 John T. (johnt519)
on 2009-05-30 19:13
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
  </Directory>
  RailsBaseURI /
</VirtualHost>

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:in `main_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:in
`handle_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:in
`handle_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:in
`main_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:in
`start'
  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:in
`spawn_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:in
`spawn_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:in `synchronize'
  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:in
`spawn_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:in
`__send__'
  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:in
`start_synchronously'


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

Thanks!
32b703cdb0ea03c3939b97a93205414f?d=identicon&s=25 John T. (johnt519)
on 2009-05-31 17:30
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}):

<snipped>

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

Thanks.
Ef0db53920b243d6758c2f6b1306df0d?d=identicon&s=25 Steve Ross (cwd)
on 2009-05-31 20:23
(Received via mailing list)
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%20guid...

The Apache VirtualHost section they use as an example is:

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

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

Hope this helps.
32b703cdb0ea03c3939b97a93205414f?d=identicon&s=25 John T. (johnt519)
on 2009-05-31 20:47
Steve Ross 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%20guid...
>
> The Apache VirtualHost section they use as an example is:
>
> <VirtualHost *:80>
>    ServerName www.mycook.com
>    DocumentRoot /weebapps/mycook/public
> </VirtualHost>
>
> 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
32b703cdb0ea03c3939b97a93205414f?d=identicon&s=25 John T. (johnt519)
on 2009-06-01 14:50
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 Lai 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
  </Directory>
  RailsBaseURI /myapp
</VirtualHost>

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
This topic is locked and can not be replied to.