Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
16 changes: 8 additions & 8 deletions attributes/default.rb
Original file line number Diff line number Diff line change
Expand Up @@ -28,18 +28,18 @@

case node["platform_version"]
when "suse"
node.set['rvm_passenger']['common_pkgs'] = %w{libcurl-devel}
node.set['rvm_passenger']['apache2_pkgs'] =
node.default['rvm_passenger']['common_pkgs'] = %w{libcurl-devel}
node.default['rvm_passenger']['apache2_pkgs'] =
%w{apache2-devel libapr1-devel libapr-util1-devel}
when "centos","redhat","fedora","scientific","amazon"
if node['platform_version'].to_f < 6
node.set['rvm_passenger']['common_pkgs'] = %w{libcurl-devel openssl-devl zlib-devel}
node.default['rvm_passenger']['common_pkgs'] = %w{libcurl-devel openssl-devl zlib-devel}
else
node.set['rvm_passenger']['common_pkgs'] = %w{curl-devel}
node.default['rvm_passenger']['common_pkgs'] = %w{curl-devel}
end
node.set['rvm_passenger']['apache2_pkgs'] = %w{httpd-devel}
node.default['rvm_passenger']['apache2_pkgs'] = %w{httpd-devel}
else
node.set['rvm_passenger']['common_pkgs'] = %w{libcurl4-openssl-dev}
node.set['rvm_passenger']['apache2_pkgs'] =
%w{apache2-threaded-dev libapr1-dev libaprutil1-dev}
node.default['rvm_passenger']['common_pkgs'] = %w{libcurl4-openssl-dev}
node.default['rvm_passenger']['apache2_pkgs'] =
%w{apache2-dev libapr1-dev libaprutil1-dev}
end
4 changes: 2 additions & 2 deletions libraries/chef_rvm_passenger_calculate_attribute.rb
Original file line number Diff line number Diff line change
Expand Up @@ -30,7 +30,7 @@ def for_root_path
gem_home = rvm_env.info.first[1]['homes']['gem']
result = "#{gem_home}/gems/passenger-#{passenger_version}"

node.set['rvm_passenger']['root_path'] = result
node.normal['rvm_passenger']['root_path'] = result
Chef::Log.debug(%{Setting node['rvm_passenger']['root_path'] = } +
%{"#{node['rvm_passenger']['root_path']}"})

Expand All @@ -47,7 +47,7 @@ def for_ruby_wrapper
wrapper_home = gem_home.sub(/\/gems\//, '/wrappers/')
result = "#{wrapper_home}/ruby"

node.set['rvm_passenger']['ruby_wrapper'] = result
node.normal['rvm_passenger']['ruby_wrapper'] = result
Chef::Log.debug(%{Setting node['rvm_passenger']['ruby_wrapper'] = } +
%{"#{node['rvm_passenger']['ruby_wrapper']}"})
end
Expand Down
4 changes: 2 additions & 2 deletions libraries/chef_rvm_passenger_recipe_helpers.rb
Original file line number Diff line number Diff line change
Expand Up @@ -44,7 +44,7 @@ def determine_gem_version_if_not_given
"there are any connection problem with the gem sources."
end

node.set[:rvm_passenger][:version] = spec[0].version.to_s
node.normal[:rvm_passenger][:version] = spec[0].version.to_s
Chef::Log.debug(%{Setting node['rvm_passenger']['version'] = } +
%{"#{node['rvm_passenger']['version']}"})
end
Expand All @@ -57,7 +57,7 @@ def determine_rvm_ruby_if_not_given
rvm_ruby = node['rvm']['default_ruby']
rvm_ruby += "@passenger" unless rvm_ruby == "system"

node.set['rvm_passenger']['rvm_ruby'] = rvm_ruby
node.normal['rvm_passenger']['rvm_ruby'] = rvm_ruby
Chef::Log.debug(%{Setting node['rvm_passenger']['rvm_ruby'] = } +
%{"#{node['rvm_passenger']['rvm_ruby']}"})
end
Expand Down
2 changes: 1 addition & 1 deletion metadata.rb
Original file line number Diff line number Diff line change
Expand Up @@ -5,7 +5,7 @@
description "Installs and configures Passenger under RVM with Apache or nginx"
long_description IO.read(File.join(File.dirname(__FILE__), 'README.md'))

version "0.10.0"
version "1.0.0"

recipe "rvm_passenger", "Installs Passenger gem with RVM"
recipe "rvm_passenger::apache2", "Enables Apache module configuration for passenger under RVM"
Expand Down
55 changes: 37 additions & 18 deletions recipes/apache2.rb
Original file line number Diff line number Diff line change
Expand Up @@ -31,43 +31,62 @@
rvm_ruby = node['rvm_passenger']['rvm_ruby']
apache_dir = node['apache']['dir']

# set the module_path attribute if it isn't set
ruby_block "Calculate node['rvm_passenger']['module_path']" do
block do
root_path = node['rvm_passenger']['root_path']
# APT-based Passenger for Ubuntu 24.04+ provides pre-built modules
# Only compile from source for older systems
apt_based_passenger = platform?('ubuntu') && node['platform_version'].to_f >= 24.0

node.set['rvm_passenger']['module_path'] =
"#{root_path}/buildout/apache2/mod_passenger.so"
Chef::Log.debug(%{Setting node['rvm_passenger']['module_path'] = } +
%{"#{node['rvm_passenger']['module_path']}"})
unless apt_based_passenger
# set the module_path attribute if it isn't set
ruby_block "Calculate node['rvm_passenger']['module_path']" do
block do
root_path = node['rvm_passenger']['root_path']

node.normal['rvm_passenger']['module_path'] =
"#{root_path}/buildout/apache2/mod_passenger.so"
Chef::Log.debug(%{Setting node['rvm_passenger']['module_path'] = } +
%{"#{node['rvm_passenger']['module_path']}"})
end
end
end

Array(node['rvm_passenger']['apache2_pkgs']).each do |pkg|
package pkg
end
Array(node['rvm_passenger']['apache2_pkgs']).each do |pkg|
package pkg
end

rvm_shell "passenger_apache2_module" do
ruby_string rvm_ruby
code %{passenger-install-apache2-module -a}
rvm_shell "passenger_apache2_module" do
ruby_string rvm_ruby
code %{passenger-install-apache2-module -a}

not_if { ::File.exists? node['rvm_passenger']['module_path'] }
not_if { ::File.exists? node['rvm_passenger']['module_path'] }
end
end

template "#{apache_dir}/mods-available/passenger.load" do
source 'passenger.load.erb'
owner 'root'
group 'root'
mode '0755'
# APT-based install manages its own module loading
not_if { apt_based_passenger }
end

template "#{apache_dir}/mods-available/passenger.conf" do
source 'passenger.conf.erb'
owner 'root'
group 'root'
mode '0755'
variables(
apt_based_passenger: apt_based_passenger
)
end

apache_module "passenger" do
module_path node['rvm_passenger']['module_path']
if apt_based_passenger
# APT package already enables the module, just ensure it's active
execute 'enable_passenger_module' do
command 'a2enmod passenger'
not_if { ::File.exist?("#{apache_dir}/mods-enabled/passenger.load") }
end
else
apache_module "passenger" do
module_path node['rvm_passenger']['module_path']
end
end
33 changes: 30 additions & 3 deletions recipes/default.rb
Original file line number Diff line number Diff line change
Expand Up @@ -38,9 +38,36 @@ class Chef::Recipe

rvm_environment rvm_ruby

rvm_gem "passenger" do
ruby_string rvm_ruby
version passenger_version
# Use APT-based Passenger for Ubuntu 24.04+ (pre-built binaries avoid compilation issues)
# For older systems, continue using the gem-based install
if platform?('ubuntu') && node['platform_version'].to_f >= 24.0
apt_repository 'phusion-passenger' do
uri 'https://oss-binaries.phusionpassenger.com/apt/passenger'
distribution 'noble'
components ['main']
key 'https://oss-binaries.phusionpassenger.com/auto-software-signing-gpg-key.txt'
end

package 'libapache2-mod-passenger'

# Update gems in RVM environment to handle default gem conflicts
# (APT Passenger uses RVM Ruby but apps may require newer default gems)
rvm_gem 'bundler' do
ruby_string rvm_ruby
end

# Replace Ruby's built-in stringio default gem with a newer version
# Must use --default flag to override the bundled default gem
rvm_shell 'install_stringio_default_gem' do
ruby_string rvm_ruby
code 'gem install stringio --default --no-document'
not_if "gem list stringio --default | grep -q 'stringio (3\\.[2-9]'"
end
else
rvm_gem "passenger" do
ruby_string rvm_ruby
version passenger_version
end
end

# calculate the root_path attribute if it isn't set. This is evaluated in the
Expand Down
4 changes: 4 additions & 0 deletions templates/default/passenger.conf.erb
Original file line number Diff line number Diff line change
Expand Up @@ -2,5 +2,9 @@
# Generated by Chef for <%= node['fqdn'] %>
# Local modifications will be overwritten.
#
<% if @apt_based_passenger %>
PassengerRoot /usr/lib/ruby/vendor_ruby/phusion_passenger/locations.ini
<% else %>
PassengerRoot <%= node['rvm_passenger']['root_path'] %>
<% end %>
PassengerRuby <%= node['rvm_passenger']['ruby_wrapper'] %>