Recommended Free Tools
iTechGuides is reader-supported. When you buy through links on our site, we may earn an affiliate commission. As an Amazon Associate I earn from qualifying purchases. Learn more
Antihost offers Linux VPS plans with full root access, unlimited traffic on a 1 Gbps port and a 14-day free trial.
The dependable way to run Rails on an Ubuntu VPS is to install a supported Ubuntu LTS release, match Ruby to the version declared by the application, install the locked Bundler dependencies, prepare PostgreSQL, and run Rails behind Puma and Nginx. You can manage that stack directly with systemd, or deploy the application in Docker containers with Rails’ Kamal workflow.
This article assumes a fresh Ubuntu LTS VPS, SSH access, a domain name or test IP address, and a Rails application stored in version control. Keep application-specific versions from the repository’s .ruby-version, Gemfile, and lockfile rather than copying a version from an unrelated tutorial.
Quick wins for a faster PC:
Clear out junk files and repair common Windows errorsFree Scan →Scan for outdated or missing drivers - takes under a minuteDriver Scan →Repair Windows errors before they cause bigger problemsFix Now →1. Decide what you are deploying
A Rails server is a group of cooperating services, not a single package. A typical production request travels through this path:
Internet :443/:80 -> Nginx (TLS and proxy) -> Puma/Rails -> PostgreSQL
Background jobs, Redis, object storage, mail delivery, image processing, and JavaScript build tools are optional application dependencies. Do not install them merely because another Rails application uses them.
#1 Best Overall
- Powerful Turbo Fan:CAGIWIRU Electric Air Duster have reached speed up to 130000RPM,Can efficient remove dust and debris.With LED light and Three Adjustable Speed to meet with different cleaning tasks.
- With Attached USB C Fasting Charging cable.Charing 3 hours,Enjoy up to 240 minutes of use on the lowest setting, For third speed can use for 25mins.with four charging options to meet with your needs.
- Wide Application:Upgraded attached 5 different nozzles,making it suitable for a variety of scenes, such as car,pet, pc, keyboards, and other electronic devices. It also serves for office and home clean duster.
- Handy Design & Portable:Cordless air duster electric nozzle is Light weight and small size, design and comfortable to hold and space saving, convenient to carry around. You can put it in your room or inside the car without taking up space.
- Warranty & Support: Our Electric air duster comes with 5 years warranty and 24/7 customer service. During this period, if you have any questions,pls kindly feel free to contact us.
Prerequisites
- An Ubuntu LTS VPS. Canonical’s Ubuntu Server documentation targets the latest LTS and covers package management, users, firewalls, encrypted communications, databases, web servers, and containers.
- An SSH key and a non-root deployment account.
- A DNS record that can point your domain to the VPS, unless you are testing with the server IP.
- A Rails repository, its production configuration, and access to any private gem or container registry it requires.
- A plan for secrets, backups, logs, updates, and rollback before the first public release.
2. Update and secure Ubuntu first
Log in as the initial VPS administrator and identify the installed release before adding application software:
lsb_release -ds
sudo apt update
sudo apt upgrade
Reboot when the kernel or other core services were upgraded, then reconnect over SSH. Create a dedicated account for deployment and application processes:
sudo adduser --disabled-password --gecos '' deploy
sudo install -d -m 700 /home/deploy/.ssh
sudo cp ~/.ssh/authorized_keys /home/deploy/.ssh/authorized_keys
sudo chown -R deploy:deploy /home/deploy/.ssh
sudo chmod 600 /home/deploy/.ssh/authorized_keys
Copying the administrator’s key is only a starting point. In a real team, install each operator’s public key deliberately, remove keys when access ends, and test a second SSH session as deploy before disabling any existing administrator access. Grant sudo only where your deployment procedure needs it; do not make the Rails process itself run as root.
Enable a host firewall while your current SSH session is still open:
sudo apt install ufw
sudo ufw allow OpenSSH
sudo ufw allow 'Nginx Full'
sudo ufw enable
sudo ufw status verbose
If you are not using Nginx, allow only the web ports that your chosen proxy listens on. Never expose PostgreSQL or Puma’s internal port to the public internet unless a documented, intentional architecture requires it.
3. Install a Ruby version that matches the application
Read the repository before choosing a runtime. Check .ruby-version, the ruby declaration in the Gemfile, and the RUBY VERSION section of Gemfile.lock. Rails, native gems, and JavaScript tooling can require a particular Ruby release.
Do these 3 things before closing this tab:
1Clear out junk files and repair common Windows errors2Fix the driver behind crashes, sound loss and screen glitches3Repair Windows errors before they cause bigger problemsUbuntu’s packaged Ruby
The Ruby project’s documented apt example is:
sudo apt-get install ruby-full
ruby --version
This is convenient for a small application that supports the Ruby version shipped by your selected Ubuntu LTS. The Ruby project also warns that major package managers can install an older Ruby than the latest release. Compare the result of ruby --version with the application’s declared requirement before running Bundler.
A version manager for pinned runtimes
When the project pins Ruby, install a maintained version manager and its build plugin according to your organization’s approved installation method. Then select the exact version for the application:
rbenv install <required-ruby-version>
cd /var/www/myapp/current
rbenv local <required-ruby-version>
ruby --version
gem update --system
gem install bundler
Use the same Ruby installation for the deploy user, systemd service, and one-off administrative commands. A common failure is installing Ruby for one account and then starting Puma as another account that cannot see that Ruby or its shims.
4. Install build tools and application dependencies
Install only the operating-system libraries your Gemfile and build process require. A common baseline for PostgreSQL-backed Rails applications is:
Rank #2
- Screen Cleaner is Your Screen’s New Bestfriend! - EVEO is proud to present a screen cleaner that’s perfectly suited for your TV. Meet your new screen cleaner, computer screen cleaner, laptop cleaner, iPad cleaner, Macbook,tv cleaner or any other electronic device. Our screen cleaner spray and wipe along with the included plush microfiber cloth, easily removes dust, fingerprints & other smudges on the screen’s surface. Clean effectively for a streak-free screen
- Gentle on your Screens - Our screen cleaner spray and wipes is compatible to be used even for the most sensitive LCD, LED, CRT, and OLED screens in proper use. Be at ease knowing that this product is compatible with all the major brands: LG, SONY, Samsung, Sharp, iPad, iPhone, Android screens, Kindle, PC monitors - we’ve got you covered! Can be used as LCD screen cleaner, tv cleaner, smart tv screen cleaner, and more
- Premium Super Soft Plush Microfiber Cloth - Included in this efficient screen cleaning kit. This screen cleaner spray and wipe has our signature plush microfiber cloth specially designed to comply with screens and monitors and leave them streak-free. Has been shown to effectively absorbs stubborn stains, zero streaks, and no fiber shedding. Always use this together with our screen cleaner for the best results
- Easy-to-Use Screen Cleaner Kit + microfiber cleaning cloth - The EVEO Screen Cleaning Kit will easily be your new favorite tool when it comes to taking care of the things you love most, quick and easy solution for a streak-free screen. Simply screw on the sprayer gun on the screen cleaner bottle. Spray the cleaning liquid onto the microfiber cloth, then wipe the screen until desired cleanliness & shine is achieved.
- Quality Screen Care Kit Worth Purchasing - Enjoy a convenient Screen Cleaner anytime, anywhere you need it. Your satisfaction is our top priority. We stand behind the quality of our products and that’s why, you shouldn’t be worrying at all. We manufacture the Best Screen Cleaner. and can be used for laptop cleaning kit, laptop screen cleaner, tv screen cleaner for smart tv. MacBook screen cleaner, monitor cleaner or screen cleaner spray for electronic devices with microfiber cleaning cloth
sudo apt install build-essential git curl libssl-dev zlib1g-dev
libreadline-dev libyaml-dev libffi-dev libgdbm-dev autoconf bison
rustc libpq-dev
Package names can differ between Ubuntu LTS releases. Add image libraries, Node-compatible tooling, Redis clients, or other development headers only when the application’s gems or asset pipeline need them.
For an existing application, clone the repository into a release directory and install the locked gems:
sudo install -d -o deploy -g deploy /var/www/myapp
sudo -u deploy git clone <repository-address> /var/www/myapp/current
cd /var/www/myapp/current
bundle config set without 'development test'
bundle install
Replace the repository address with your actual source-control location. Do not paste credentials into a shell command that will remain in history. If the lockfile specifies a Bundler version, install and invoke that version rather than silently replacing it. Start a new Rails application only when you are genuinely creating one:
rails new myapp --database=postgresql
For an existing project, its committed configuration, migrations, and build scripts are authoritative.
5. Install and configure PostgreSQL
Use the PostgreSQL version supported by the selected Ubuntu release and by the application. Install the server when the VPS will host the database; otherwise install the client libraries and use the managed database endpoint supplied by your provider.
Create a role and database with the least privileges the application needs. Run the following from a protected administrator session, replacing the names and password without putting the password in shell history:
sudo -u postgres psql
CREATE ROLE rails_app LOGIN PASSWORD 'use-a-secret-from-your-secret-manager';
CREATE DATABASE rails_production OWNER rails_app;
q
Store the connection details in a protected environment file or secret manager. A typical URL is represented as postgresql://rails_app:password@127.0.0.1:5432/rails_production; use your application’s documented variable name, such as DATABASE_URL, and never commit it.
Rails documents database connections and migrations. The convenient preparation task is:
cd /var/www/myapp/current
RAILS_ENV=production bundle exec rails db:prepare
db:prepare can create the database and run migrations where the Rails version supports those operations. Inspect the project’s deployment scripts first; some applications intentionally separate database creation, migrations, and seed data. Run seeds only when the application explicitly requires them.
6. Set production secrets and compile assets
Production Rails needs a SECRET_KEY_BASE and, for encrypted credentials, the appropriate Rails master key. Supply them through a secret manager or a root-readable environment file. Keep registry passwords, API keys, cookie secrets, and database passwords out of Git, Docker image layers, shell history, and world-readable files.
Rank #3
- 【Large size】:Measuring 800 x 300 mm/ 31. 5×12 inches, which is wider and taller than others. Large mouse pad can perfectly fit your keyboard and mouse of any size, and there is also ample space for peripherals such as phones, tablets, etc.
- 【LED backlight mouse pad】:Blade Hawks RGB mouse pad provides 7 static modes and 7 dynamic modes will give you the options you are looking for. Power-off memory function remembers the last lighting mode you selected. The super glow fiber Chroma will give you a colorful gaming setup that you want.
- 【Anti-slip rubber base】:Made from Natural rubber, this gaming mousepad will firmly grip your desktop, allowing you to enjoy the ultimate precision in the games you are most passionate about. It also comes with a texture that enhances this ability even further.
- 【Smooth and waterproof surface】: Micro-textured cloth surface, for extremely precise mouse control and a smooth movement. When liquid splashes on the gaming mouse pad, it forms water droplets and slides down. Will not delay your work or gameplay.
- 【Plug and play】: This mouse and keyboard pad is powered by USB, plug and play, no driver required. One button control light modes. Press one time to change the lighting mode, press twice to change the brightness, press and hold about 3 seconds turn ON/OFF.
A protected environment file might contain:
RAILS_ENV=production
RAILS_LOG_TO_STDOUT=true
SECRET_KEY_BASE=replace-with-a-long-random-value
DATABASE_URL=postgresql://rails_app:password@127.0.0.1:5432/rails_production
RAILS_MASTER_KEY=replace-if-the-application-uses-encrypted-credentials
Set ownership and permissions so only the deployment account and the service manager can read it. Compile assets with the task supported by the project’s Rails version:
RAILS_ENV=production bundle exec rails assets:precompile
Some applications build JavaScript or CSS through a separate command, while others use import maps or a different asset pipeline. Follow the repository’s documented build steps and verify that generated files are present under public.
Outdated Drivers Are Slowing You Down
One free scan finds every outdated or missing driver and matches the right update for your exact hardware.Free scan · exact hardware matchPC Slower Than It Used to Be?
A free scan shows the junk files, broken settings and background clutter dragging Windows down - then fixes them in one click.Free scan · Windows 10 & 117. Choose a production deployment model
Both of the following models are valid. Pick one deliberately instead of mixing pieces from different tutorials.
| Concern | Puma, systemd, and Nginx | Kamal and Docker |
|---|---|---|
| Runtime isolation | Ruby and gems run directly on the Ubuntu host; isolation depends on users, directories, and package discipline. | The application and its system packages are assembled into an image, giving a repeatable container runtime. |
| Upgrade and rollback | You manage releases, symlinks, Ruby versions, and service restarts yourself; rollback can be a previous release directory. | Deploying a previous image provides a clear rollback unit, but image and registry hygiene become part of operations. |
| Operational complexity | Fewer moving parts for one application, but you must write and maintain systemd and Nginx configuration. | Rails supplies a documented workflow, while Docker, a registry, SSH access, and container troubleshooting are required. |
| Resource overhead | No container layer; useful on a small VPS, subject to Ruby and database memory needs. | Docker adds some storage and memory overhead, normally modest compared with the application’s own services. |
| Multiple applications | Several apps can share Nginx and the host, but each needs isolated users, sockets, directories, and environment files. | Containers isolate dependencies more cleanly, while the host still needs proxy, storage, and monitoring design. |
| TLS and proxy | You configure Nginx and certificate automation directly. | Kamal’s proxy configuration can terminate TLS when the domain and certificate settings are supplied correctly. |
| Observability | Use journald, Nginx logs, Rails logs, and your monitoring agent. | Use container logs plus proxy and host metrics; ensure logs survive container replacement. |
8. Run Rails with Puma, systemd, and Nginx
Create release and shared directories
Keep persistent data outside an individual release so a new checkout does not delete uploads, sockets, or environment files:
sudo install -d -o deploy -g deploy /var/www/myapp/releases
sudo install -d -o deploy -g deploy /var/www/myapp/shared/tmp/sockets
sudo install -d -o deploy -g deploy /var/www/myapp/shared/log
sudo install -d -o deploy -g deploy /var/www/myapp/shared/storage
Point /var/www/myapp/current at the release you intend to serve. If users upload files locally, configure Rails to use the shared storage path or, preferably, durable object storage with its own backup policy.
Bind Puma privately
Configure Puma to listen on localhost or a Unix socket, not on a public interface. A representative config/puma.rb entry is:
The Tool Desk
Outbyte PC Repair FREEClear out junk files and repair common Windows errorsFree Scan →Outbyte Driver Updater FREEScan for outdated or missing drivers - takes under a minuteDriver Scan →environment ENV.fetch('RAILS_ENV', 'production')
bind 'unix:///var/www/myapp/shared/tmp/sockets/puma.sock'
pidfile '/var/www/myapp/shared/tmp/pids/puma.pid'
stdout_redirect '/var/www/myapp/shared/log/puma.stdout.log', '/var/www/myapp/shared/log/puma.stderr.log', true
Choose worker and thread counts from the application’s memory profile and workload. There is no universal number: each worker loads Ruby and application code, while more threads can increase database connection demand. Set the corresponding database pool size and measure under representative traffic.
Create a systemd unit
Save a unit such as /etc/systemd/system/myapp.service, adjusting the Ruby and Bundler paths for your installation:
[Unit]
Description=Myapp Rails application
After=network.target
[Service]
Type=simple
User=deploy
Group=deploy
WorkingDirectory=/var/www/myapp/current
EnvironmentFile=/etc/myapp/production.env
ExecStart=/home/deploy/.rbenv/shims/bundle exec puma -C config/puma.rb
Restart=always
RestartSec=5
TimeoutStopSec=30
[Install]
WantedBy=multi-user.target
Protect the environment file and create its parent directory before enabling the service:
sudo install -d -m 750 /etc/myapp
sudo chown root:deploy /etc/myapp/production.env
sudo chmod 640 /etc/myapp/production.env
sudo systemctl daemon-reload
sudo systemctl enable --now myapp
sudo systemctl status myapp
sudo journalctl -u myapp -n 100 --no-pager
If the service exits immediately, run the same Bundler command as the deploy user from the working directory. This usually reveals a missing gem, an unreadable secret file, a wrong Ruby shim, or a failed database connection.
Rank #4
- 【Softer and More Comfortable】Vaydeer wrist rest has unique diamond pattern, which is the combination of softness and aesthetics. The materials of wrist rest are improved into higher quality memory foam and covered with silky smooth lycra. The computer wrist rest makes you as comfortable and cushiony as like rest your wrists on clouds.
- 【Ergonomic Wrist Saver】The wrist rests for keyboard and mouse comes with a 17.32×3.15×0.83 inch keyboard wrist pad and a 5.94×3.15×0.83 inch mouse wrist support. Based on ergonomic design, the unique concave shape is the perfect fit for your wrist joints. The wrist rest pad fits most computer keyboards and laptops, improve hand and wrist posture, release your wrist and arm stress.
- 【Non-Slip Rubber Bottom】Featuring an anti-skid silicone base on the bottom, this wrist keyboard support stays firmly in place on your desk, preventing the padding from sliding around, ensuring stable and consistent wrist support during extended computer sessions.
- 【Better Experience & Pain Relief】Our keyboard arm rest is beneficial to alleviate the soreness caused by direct contact and friction between your arm and a hard desk surface, reducing the risk of wrist fatigue or carpal tunnel. The soft texture of memory foam can evenly distribute the pressure around your wrists and provide good support with just enough give.
- 【Helpful in Multiple Scenarios】Whether you're working, studying, writing, typing, gaming, this keyboard and mouse rest combo is an essential accessory to add comfort and support to your hands and wrists. It’s also a great gift for men, women, family, friend, coworker, gamer, teacher, etc.
Configure Nginx as the public reverse proxy
Install Nginx and create a server block for your domain:
sudo apt install nginx
sudo nano /etc/nginx/sites-available/myapp
A minimal Unix-socket configuration is:
server {
listen 80;
server_name your-domain.example;
root /var/www/myapp/current/public;
location /assets/ {
try_files $uri =404;
access_log off;
add_header Cache-Control 'public, max-age=31536000, immutable';
}
location / {
proxy_pass http://unix:/var/www/myapp/shared/tmp/sockets/puma.sock:
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header X-Forwarded-Proto $scheme;
proxy_read_timeout 60s;
}
}
Enable and validate it:
sudo ln -s /etc/nginx/sites-available/myapp /etc/nginx/sites-enabled/myapp
sudo nginx -t
sudo systemctl reload nginx
The exact proxy_pass syntax for a Unix socket is sensitive to the trailing colon; preserve it when adapting the example. Remove the default server block if it captures your domain. DNS must resolve the domain to the VPS before a public certificate can be issued.
Add HTTPS and renewal
Choose an ACME client or certificate provider approved for your environment. Obtain a certificate for the domain, configure Nginx to redirect HTTP to HTTPS, and verify that renewal runs automatically. Test renewal in the provider’s dry-run mode and keep port 80 reachable if the selected challenge method needs it. Rails should receive the forwarded HTTPS scheme so it generates secure URLs and cookies.
9. Deploy with Rails Kamal instead
The Rails Getting Started guide states that “Rails comes with a deployment tool called Kamal that we can use to deploy our application directly to a server.” Kamal uses Docker containers and a production Dockerfile. Its documented prerequisites include an Ubuntu LTS server with at least 1 GB of RAM, a container registry account, SSH access, and DNS for the application domain.
Prepare the application
Review the generated production Dockerfile and config/deploy.yml. Set the image name, server address, SSH user, registry namespace, and any accessory services required by the application. Export the registry credential through the environment variable expected by the project’s Kamal configuration; do not commit it.
Run the first setup
bin/kamal setup
Setup installs or prepares the required container services on the server, pulls the image, and starts the configured application. Confirm that the image name, registry credential, firewall rules, and DNS record are correct before running it on a production host.
Deploy later releases
bin/kamal deploy
Build and push the image from a controlled workstation or CI runner, then let Kamal replace the running container according to the deployment configuration. Configure the proxy section with your real domain when enabling SSL. Check migrations, persistent volumes, health checks, and log handling in the generated configuration rather than assuming every Rails feature is automatically durable inside a container.
Free tools Windows power users keep installed
One-click scans. No signup required.
10. Consider a one-click Rails image
A preconfigured VPS image can reduce initial setup work when you accept the provider’s package choices. For example, DigitalOcean documents a Rails image listing Ubuntu 24.04, Ruby 3.4.7, Rails 8.1.1, PostgreSQL 15, Nginx, Docker, SSL/TLS setup, and systemd integration. Those are catalog versions, not permanent compatibility guarantees; verify the current image contents and update policy when you create the server.
After provisioning any image, inspect users, SSH policy, firewall rules, Ruby and Rails versions, PostgreSQL exposure, certificate renewal, and unattended updates. A one-click image changes the starting point, not your responsibility for secrets, backups, application upgrades, and incident recovery.
11. Verify the deployment before opening it to users
Use a staged checklist instead of treating a successful process start as proof that the application is ready:
Best Value
- 【No Drill Mounted】Cable management tray can be assembled in as little as 3 minutes or less-simply. Side clips easily clampe the edge of desk, pass through the holes on the sides, and secure excess cables with baskets. Desk cable management supports inward or outward installation to meet your needs in different scenarios, and provides you with great convenience when collecting and organizing wires.
- 【Rubber Pad Protects Desk】Wire organizer under desk built-in soft rubber pads on the clamp protect your desk from scratches, so you will not damage your furniture or office.
- 【Sturdy and Beautiful】Cord management under desk is made of high-quality carbon steel and holds about 15 lbs. The wire basket has 2 holes on each side of the tray to enable your cables to pass freely. Cable baskets are suitable for desk thickness use from 0.4" to 2.4".
- 【Space Saving & Keep Organized】Desk cable management tray holds all your power cords, outlet strips, USB hubs and computer transformers hidden from your feet, and the data cables will not enter the vacuum cleaner to keep your desk clean and tidy. Desk wire organizer is also suitable for use in the kitchen and outdoors.
- 【Reduce Safety Risks】Cable tray under desk keeps all plugs away from your kids, no more worry about tripping. Using 2 holes wire tray saves extra space, helps you easily cabling and wire protection. The mesh design is not easy to accumulate dust, but avoids safety accidents caused by messy wires.
- On the VPS, request the app through its local socket or loopback proxy and confirm a healthy response.
- From an external network, open the domain over HTTPS and verify the certificate name, redirect behavior, secure cookies, and static assets.
- Run the production database preparation task and confirm that the expected schema version is present.
- Exercise authentication, file uploads, mail delivery, background jobs, and any third-party callbacks that production uses.
- Reboot the VPS and confirm that PostgreSQL, the Rails service, Nginx, workers, and any container services return automatically.
- Inspect application, Puma, Nginx, PostgreSQL, and container logs for warnings rather than checking only the HTTP status.
12. Operate and maintain the VPS
Backups and recovery
Schedule PostgreSQL backups, copy them away from the VPS, and periodically restore one to a separate environment. Back up uploaded files and encrypted credentials according to their storage model. Document the exact commands and secrets needed to rebuild the server; a backup that has never been restored is not a tested recovery plan.
What’s actually slowing this PC down?
Pick the symptom - the matching free tool is one click away.
Updates and dependency changes
Apply Ubuntu security updates on a schedule, monitor Ruby and Rails security advisories, and test gem upgrades in staging. For a host-based deployment, upgrade Ruby only through a planned release because changing the interpreter can invalidate native extensions. For Kamal, rebuild and redeploy the image after dependency or base-image changes.
Logs, metrics, and disk space
Use journalctl -u myapp for the systemd service, Nginx access and error logs for proxy failures, and your application’s structured logs for request and job failures. Configure rotation and alert on disk, memory, database connections, queue depth, and certificate expiry. A full disk can look like a database outage or a failed asset build.
13. Troubleshoot common failures
bundle install fails while compiling a gem
Read the first missing header or library in the error, install the corresponding Ubuntu development package, and rerun Bundler with the application’s selected Ruby. Do not solve a compiler error by switching Ruby versions unless the project’s compatibility requirements permit it.
Puma starts manually but systemd fails
Compare the service’s User, WorkingDirectory, EnvironmentFile, Ruby shim path, and file permissions with the interactive shell. Use sudo -u deploy to reproduce the command, then inspect journalctl -u myapp.
Crashes, No Sound, or Screen Glitches?
Random freezes, missing sound and display glitches usually trace back to one bad driver. Find and replace yours safely.Free scan · under a minutePC Slower Than It Used to Be?
A free scan shows the junk files, broken settings and background clutter dragging Windows down - then fixes them in one click.Free scan · Windows 10 & 11Nginx returns 502 Bad Gateway
Check that Puma is running, the socket exists, and the Nginx worker can traverse every parent directory and read the socket. A stale socket after a crash, a mismatched socket path, or a service running under the wrong user is more common than an Nginx syntax error. Run sudo nginx -t and inspect both Nginx and Puma logs.
Rails cannot connect to PostgreSQL
Verify the database URL, role password, database name, PostgreSQL listening address, and local authentication rules. Test with the PostgreSQL client using the same host, port, database, and role that the Rails environment uses. Avoid granting superuser privileges to the application role.
Assets or uploads return 404
Confirm that the production asset build completed, Nginx’s root points to the current release’s public directory, and the shared storage path is mounted or linked as configured. Keep generated assets in the release and user data in persistent storage.
The VPS runs out of memory
Inspect worker count, thread count, database connections, asset-build usage, and background jobs. Reduce concurrency only after measuring, add swap or memory where appropriate, and ensure the database pool is not larger than the available connections. The Kamal guide’s 1 GB figure is a documented minimum for its deployment prerequisite, not a performance promise for every Rails workload.
Do these 3 things before closing this tab:
1Clear out junk files and repair common Windows errors2Fix the driver behind crashes, sound loss and screen glitches3Repair Windows errors before they cause bigger problems14. A practical decision rule
- Choose host-based Puma, systemd, and Nginx when you want the fewest runtime layers, are comfortable maintaining Linux services, and have one or a small number of applications.
- Choose Kamal and Docker when repeatable images, container-based rollback, and a Rails-documented workflow outweigh the extra registry and container operations.
- Choose a one-click image when fast provisioning matters most, then audit and customize the resulting server as if you had installed every component yourself.
Whichever route you choose, keep Ruby aligned with the repository, run migrations before serving traffic, terminate public TLS at a maintained proxy, bind Puma privately, protect secrets, and rehearse backups and restarts. That combination is what turns an Ubuntu VPS from a reachable machine into a maintainable Rails production server.
Quick Recap
Product prices and availability are accurate as of the date/time indicated and are subject to change. Any price and availability information displayed on Amazon at the time of purchase will apply.

