Module: Moonshadow::Manifest::Rails::Passenger

Included in:
Moonshadow::Manifest::Rails
Defined in:
lib/moonshine/manifest/rails/passenger.rb

Instance Method Summary collapse

Instance Method Details

#passenger_apache_moduleObject

Build, install, and enable the passenger apache module. Please see the passenger.conf.erb template for passenger configuration options.



10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
# File 'lib/moonshine/manifest/rails/passenger.rb', line 10

def passenger_apache_module
  # Install Apache2 developer library
  package "apache2-threaded-dev", :ensure => :installed

  file "/usr/local/src", :ensure => :directory

  exec "symlink_passenger",
    :command => 'ln -nfs `passenger-config --root` /usr/local/src/passenger',
    :unless => 'ls -al /usr/local/src/passenger | grep `passenger-config --root`',
    :require => [
      package("passenger"),
      file("/usr/local/src")
    ]

  # Build Passenger from source
  exec "build_passenger",
    :cwd => configuration[:passenger][:path],
    :command => '/usr/bin/ruby -S rake clean apache2',
    :unless => "ls `passenger-config --root`/ext/apache2/mod_passenger.so",
    :require => [
      package("passenger"),
      package("apache2-mpm-worker"),
      package("apache2-threaded-dev"),
      exec('symlink_passenger')
    ]

  load_template = "LoadModule passenger_module #{configuration[:passenger][:path]}/ext/apache2/mod_passenger.so"

  file '/etc/apache2/mods-available/passenger.load',
    :ensure => :present,
    :content => load_template,
    :require => [exec("build_passenger")],
    :notify => service("apache2"),
    :alias => "passenger_load"

  file '/etc/apache2/mods-available/passenger.conf',
    :ensure => :present,
    :content => template(File.join(File.dirname(__FILE__), 'templates', 'passenger.conf.erb')),
    :require => [exec("build_passenger")],
    :notify => service("apache2"),
    :alias => "passenger_conf"

  a2enmod 'passenger', :require => [exec("build_passenger"), file("passenger_conf"), file("passenger_load")]
end

#passenger_configure_gem_pathObject



69
70
71
72
73
74
75
76
77
78
79
# File 'lib/moonshine/manifest/rails/passenger.rb', line 69

def passenger_configure_gem_path
  configure(:passenger => {})
  return configuration[:passenger][:path] if configuration[:passenger][:path]
  version = begin
    configuration[:passenger][:version] || Gem::SourceIndex.from_installed_gems.find_name("passenger").last.version.to_s
  rescue
    `gem install passenger --no-ri --no-rdoc`
    `passenger-config --version`.chomp
  end
  configure(:passenger => { :path => "#{Gem.dir}/gems/passenger-#{version}" })
end

#passenger_gemObject

Install the passenger gem



3
4
5
6
# File 'lib/moonshine/manifest/rails/passenger.rb', line 3

def passenger_gem
  configure(:passenger => {})
  package "passenger", :ensure => (configuration[:passenger][:version] || :latest), :provider => :gem
end

#passenger_siteObject

Creates and enables a vhost configuration named after your application. Also ensures that the 000-default vhost is disabled.



57
58
59
60
61
62
63
64
65
66
67
# File 'lib/moonshine/manifest/rails/passenger.rb', line 57

def passenger_site
  file "/etc/apache2/sites-available/#{configuration[:application]}",
    :ensure => :present,
    :content => template(File.join(File.dirname(__FILE__), 'templates', 'passenger.vhost.erb')),
    :notify => service("apache2"),
    :alias => "passenger_vhost",
    :require => exec("a2enmod passenger")

  a2dissite '000-default', :require => file("passenger_vhost")
  a2ensite configuration[:application], :require => file("passenger_vhost")
end