Hi Vell,

Once you figure out that apache vhost path / read issue on your new
setup, ....

If you're using passenger and you're running rvm, then you're likely
using (or will use) different rubies and/or gemsets for projects on a
given machine.  If so, then you might want to consider using passenger-
standalone instead of passenger-apache-module:

http://www.modrails.com/documentation/Users%20guide%20Standalone.html

The main benefit of running passenger-standalone is that you can run
multiple projects that use diff rubies/gemsets from the same apache (/
nginx/...).  Here's an example setup from the phusion folks:

http://blog.phusion.nl/2010/09/21/phusion-passenger-running-multiple-ruby-versions/

I've been using passenger-standalone in production for over a year now
on a number of projects, and it works well.  Those clients that use
passenger no longer use passenger-module and instead just use proxy'd
passenger-standalone for both their dev and prod envs.

Here's an example of the setup on a local dev instance for a given rvm
passenger-standalone project where I typically maintain an rvm gemset
per project:


####### localhost subdomain for the proj:
$ cat /etc/hosts
...
127.0.0.1 foo.localhost
...


###### vhost conf for the proj:

$ cat /etc/apache2/sites-available/foo.conf
#### http://foo.localhost/
<VirtualHost *:80>
  ServerName foo.localhost
  DocumentRoot /path/to/foo/public
  <Directory /path/to/foo/public>
    AllowOverride all
    Options -MultiViews
  </Directory>

  ProxyRequests Off
  <Proxy *>
    Order deny,allow
    Deny from all
    Allow from 127.0.0.1
  </Proxy>
  ProxyPass / http://127.0.0.1:3044/
  ProxyPassReverse / http://127.0.0.1:3044/
  RewriteEngine On
  RewriteCond %{LA-U:REMOTE_USER} (.+)
  RewriteRule . - [E=RU:%1]
  RequestHeader add X-Forwarded-User %{RU}e
  ProxyPreserveHost on

  CustomLog /var/log/apache2/foo_access_log combined
  ErrorLog /var/log/apache2/foo_error_log

  ErrorDocument 503 "<!DOCTYPE html><html><head><meta http-
equiv='Content-Type' content='text/html; charset=UTF-8' /><title>Foo
Service Is Temporarily Unavailable (503)</title></head><body><h2>Foo
Service Is Temporarily Unavailable (503)</h2><p>The Foo service is
temporarily unable to process your request due to maintenance
downtime.</p><p>Thanks for your patience. Please try again later.</p></
body></html>"

</VirtualHost>


###### I usually have a custom script to
###### manage rails env server for proj:

$ pwd
/path/to/foo

$ cat ./script/foo_env_server.rb
###
### foo_env_server.rb is used to start/stop/restart/status the foo
env.
###
### Usage: $ ruby ./script/foo_env_server.rb ENV ACTION
###   ENV     : development or production
###   ACTION  : start, stop, restart or status
###
### Note: currently serving foo rails app using passenger-standalone
###       proxy'd via apache.
###

APP_NAME = "foo"
DEV_PORT = 3044
PROD_PORT = 8044

PROJ_ROOT = File.expand_path("#{File.dirname(__FILE__)}/..")
DEV_ENV = "development"
PROD_ENV = "production"
ENVS = [ DEV_ENV, PROD_ENV ]
LOG_FNAMES = { DEV_ENV=>"#{PROJ_ROOT}/log/#{DEV_ENV}.log",
PROD_ENV=>"#{PROJ_ROOT}/log/#{PROD_ENV}.log" }
PID_FNAMES = { DEV_ENV=>"#{PROJ_ROOT}/tmp/pid/#{DEV_ENV}-passenger-
#{DEV_PORT}.pid", PROD_ENV=>"#{PROJ_ROOT}/tmp/pid/#{PROD_ENV}-
passenger-#{PROD_PORT}.pid" }
PORTS = { DEV_ENV=>DEV_PORT, PROD_ENV=>PROD_PORT }
ACTIONS = [ 'status', 'start', 'stop', 'restart' ]
...

def start(env)
  port = PORTS[env]
  pid_fname = PID_FNAMES[env]
  log_fname = LOG_FNAMES[env]
  ...
                                   # start env server.
  res = `passenger start --port #{port} --environment #{env} --log-
file #{log_fname} --pid-file #{pid_fname} --daemonize 2>&1`.strip
  ...
end
...


$ rvm 1.9.2@foo && ruby ./script/foo_env_server.rb development restart
...
foo development env on port 3044:    started: pid = 26797  (saved to /
path/to/foo/tmp/pid/development-passenger-3044.pid)


###### test serving static content?:

$ echo "hi from static foo" > ./public/foo.txt && curl -si
http://foo.localhost/foo.txt && rm ./public/foo.txt
HTTP/1.1 200 OK
...
hi from static foo


###### test serving dynamic content?:

$ cat ./config/routes.rb
...
  match '/ping' => 'misc#ping', :via => [:get]
...

$ cat ./app/controllers/misc_controller.rb
...
  def ping
    render(:text=>"1\n")
  end
...

$ curl -si http://foo.localhost/ping
HTTP/1.1 200 OK
...
1


Another general benefit of this type of proxy'd setup is that if you
or your client decides they want to test / use a diff rails app server
for the proj, like unicorn or thin or ...., it's a lot easier to make
that switch (basically, stop curr env, install new gems as required,
mod ./script/foo_env_server.rb start call, start env, test, ....).

Jeff

On Dec 14, 10:51 am, Vell <[email protected]> wrote:
> That is a very good catch. I will certainly make that change as well.
> I am at the point that I am also going to re-install ubuntu and start
> from scratch just to eliminate any other possibilities that might be
> happening behind the scenes. I will post my success of failure once I
> am done.
>
> On Dec 14, 11:21 am, Frederick Cheung <[email protected]>
> wrote:
>
>
>
>
>
>
>
> > On Dec 14, 3:15 pm, Vell <[email protected]> wrote:
>
> > >     DocumentRoot "/home/lmcilwain/vell/current/public"
> > > <Directory "/var/www/sites/vell/current/public">
>
> > The fact that these two paths don't match is suspicious to me. You'd
> > want both pointing at wherever it is on this that your app is.
>
> > Fred

-- 
You received this message because you are subscribed to the Google Groups "Ruby 
on Rails: Talk" group.
To post to this group, send email to [email protected].
To unsubscribe from this group, send email to 
[email protected].
For more options, visit this group at 
http://groups.google.com/group/rubyonrails-talk?hl=en.

Reply via email to