Peder
Peder

Reputation: 2809

How to deploy Rails 3.1 app in a subdirectory

How do I configure a Rails 3.1 application to run under a specific directory such as "/r"?

I tried in config.ru:

map '/r' do
    run Debtor::Application
end

but that just returned "Not Found: /r"

To get it to work I had to enclose all routes in a scope:

scope '/r' do 
    #routes
end

and to add the following line to config/applcation.rb

config.assets.prefix = "/r/assets"

and to move my jquery ui css files from /stylesheets to /r/stylesheets.

this seems too complicated. isn't there an easier way? and why isn't my config.ru setting working?

my use case is to have a rails powered ajax backend for a wordpress server.

Upvotes: 9

Views: 7796

Answers (3)

Doon
Doon

Reputation: 20232

are you running under passenger?

Then RailsBaseURI is probably what you want.

https://www.phusionpassenger.com/library/deploy/apache/deploy/ruby/#deploying-an-app-to-a-sub-uri

If not running under passenger, please update your question to show what you are deployed under.

Upvotes: 6

af_jason
af_jason

Reputation: 63

What worked for me was creating the symbolic link for the sub-uri (/info) to the 'public' folder of the application (setup under another user on my server, /home/otheruser/current/public).

ln -s /home/myapp/current/public /home/mysite/public_html/info

Then I inserted this configuration inside of the VirtualHost entry for the site:

Alias /info /home/myapp/current/public
<Location /info>
  PassengerAppRoot /home/myapp/current
  RackEnv production
  RackBaseURI /info
</Location>

No scoped routes, no asset prefix configuration.

Upvotes: 4

Lasse Bunk
Lasse Bunk

Reputation: 1858

Here’s how to deploy a Rails 3.1 app to a subdirectory in Apache, replacing config.action_controller.relative_url_root which no longer exists.

In config/routes.rb:

scope 'my_subdir' do
  # all resources and routes go here
end

In your Apache configuration file:

Alias /my_subdir /var/www/my_subdir/public
<Location /my_subdir>
  SetEnv RAILS_RELATIVE_URL_ROOT "/my_subdir"
  PassengerAppRoot /var/www/my_subdir
</Location>

And it should work, including automatically pointing all your assets to /my_subdir.

Upvotes: 3

Related Questions