File
DEVELOPERS.TXT

Path: | DEVELOPERS.TXT
Modified: | Sun Oct 10 20:52:03 +0200 2010

# Developers information

## Required software

The tests need the following software installed:

- All the usual Phusion Passenger dependencies.
- Ruby on Rails 1.2.x
- Ruby on Rails 2.0.x
- Ruby on Rails 2.2.x
- Ruby on Rails 2.3.x
- Ruby on Rails 3.0.x
- rspec >= 1.1.2
- mime-types >= 1.15
- sqlite3-ruby

The following software is optional:

- RCov, for code coverage
- RDoc, for generating HTML Ruby API documentation
- Doxygen, for generating HTML C++ API documentation
- dot (part of Graphviz), for generating diagrams in HTML API documentation
- The font "Bitstream Vera Sans", used in the class diagrams. See www.gnome.org/fonts
- AsciiDoc >= 8.2.5, for converting various doc/*.txt documents to HTML

## Compiling Phusion Passenger

Run the following command to compile everything:

     rake

## Directory structure

The most important directories are:

lib/phusion_passenger
  The source code for the spawn server, which is written in Ruby.
ext/phusion_passenger
  Native extensions for Ruby, used by the spawn server.
ext/apache2
  Apache 2-specific source code.
ext/nginx
  Nginx-specific source code.
ext/common
  Source code shared by the Apache and Nginx modules.
bin
  Executables.
doc
  Various documentation.
test
  Unit tests and integration tests.
test/support
  Support/utility code, used in the tests.
test/stub
  Stub code, used in the tests.

Less important directories:

ext/boost
  A stripped-down and customized version of the Boost C++ library (www.boost.org).
ext/oxt
  The "OS eXtensions for boosT" library, which provides various important functionality necessary for writing robust server software. It provides things like support for interruptable system calls and portable backtraces for C++. Boost was modified to make use of the functionality provided by OXT.
benchmark
  Benchmark tools.
debian
  Debian packaging files.
man
  Man pages.
misc
  Miscellaneous tools.
build
  Rake tasks used by the build system.

## Tests

Run all tests:

     rake test

Run only the unit tests for the C++ components:

     rake test:cxx

Run just the unit tests for the Ruby spawn server:

     rake test:ruby

Run just the integration tests:

     rake test:integration            # All integration tests.
     rake test:integration:apache2    # Just integration tests for Apache 2.
     rake test:integration:nginx      # Just integration tests for Nginx.

Notes:

- Some tests, such as the ones that test privilege lowering, require root privileges. Those will only be run if Rake is run as root.
- Some tests will be run against multiple Rails versions in order to test compatibility. This can take a long time. If you want to test against only a single Rails version, then set the environment variable ONLY_RAILS_VERSION to one of the subdirectory names in test/stub/rails_apps, e.g. ‘export ONLY_RAILS_VERSION=2.3‘

## Documentation

Various developer documents can be found in ‘doc/*.html’.

The Ruby part‘s API reference is located in ‘doc/rdoc/’. The C++ part‘s API reference is located in ‘doc/cxxapi/’.