Deploying a Rack application with Phusion Passenger is a straightforward and efficient way to get your Ruby application up and running on a production server. This article guides you through the steps to deploy a Rack-based application, specifically focusing on the Serve framework, using Phusion Passenger. We’ll cover the setup on both Apache and Nginx, ensuring your Serve project runs smoothly and efficiently.
Prerequisites Rack application with Phusion Passenger
Before we start, ensure you have the following installed:
- Ruby and RubyGems
- The Serve gem
- Phusion Passenger
- Apache or Nginx
Setting Up Your Serve Project
First, create your Serve project if you haven’t already:
serve create my_project
cd my_project
This command generates a new Serve project in the my_project
directory.
Installing Phusion Passenger
Install Passenger as a gem:
gem install passenger
Then, run the Passenger installation command for either Apache or Nginx. Passenger will guide you through the necessary steps:
For Apache:
passenger-install-apache2-module
For Nginx:
passenger-install-nginx-module
Follow the on-screen instructions to configure your web server with Passenger.
Configuring Your Web Server
Apache Configuration
Edit your Apache configuration file (often found at /etc/apache2/sites-available/000-default.conf
or a similar location) and add the following, adjusting paths as necessary:
<VirtualHost *:80>
ServerName yourdomain.com
DocumentRoot /path/to/my_project/public
<Directory /path/to/my_project/public>
Allow from all
Options -MultiViews
Require all granted
</Directory>
RackBaseURI /
<Directory /path/to/my_project>
Options -MultiViews
</Directory>
</VirtualHost>
Enable the Passenger Apache module and restart Apache:
sudo a2enmod passenger
sudo systemctl restart apache2
Nginx Configuration
For Nginx, edit your Nginx configuration file (often located at /etc/nginx/sites-available/default
or a similar location) to include:
server {
listen 80;
server_name yourdomain.com;
root /path/to/my_project/public;
passenger_enabled on;
passenger_ruby /path/to/ruby;
}
Replace /path/to/ruby
with the output from which ruby
, indicating the Ruby interpreter’s location.
Restart Nginx to apply the changes:
sudo systemctl restart nginx
Deploying Your Application
With your web server configured, your Serve project is now accessible via your specified domain. Ensure you’ve populated your Serve project with your application code and views.
Debugging and Logs
Should you encounter issues, consult the logs:
- Apache:
/var/log/apache2/error.log
- Nginx:
/var/log/nginx/error.log
These logs can provide insights into any configuration or application errors.
FAQ
Q: How do I install Serve?
A: Use the command gem install serve
to install Serve.
Q: Can I deploy a Serve project on a subpath?
A: Yes, adjust the RackBaseURI
directive for Apache or the root
directive for Nginx to point to your project’s public directory.
Q: How do I update my Serve application?
A: Update your application code as needed, and restart Apache or Nginx to apply changes.
Q: What if my application is not loading?
A: Check your server’s error logs for specific messages. Ensure your web server configuration points correctly to your Serve project’s public
directory.
Q: How can I secure my Serve project?
A: Consider implementing SSL/TLS encryption, restricting access with .htaccess
files or Nginx directives, and ensuring your application code follows security best practices.
Q: Can I use Passenger with Ruby versions managers like RVM or rbenv?
A: Yes, ensure you point to the correct Ruby interpreter in your web server’s configuration, typically found via which ruby
.
Q: How do I scale my Serve application with Passenger?
A: Passenger automatically manages application instances. Configure the passenger_max_pool_size
directive in Nginx or the PassengerMaxPoolSize
directive in Apache to control scaling.
Q: Is it possible to deploy multiple Serve projects on one server?
A: Yes, configure multiple virtual hosts (Apache) or server blocks (Nginx) for each project.
Q: How do I update Passenger?
A: Run gem update passenger
and reinstall the Apache/Nginx module as needed.
Deploying your Serve project with Phusion Passenger offers a robust solution for Ruby applications, combining the flexibility of Rack with the power of a dedicated web server. Whether you’re running a small application or a large-scale deployment, this guide provides a solid foundation for getting your Serve project live with minimal hassle.