This is an opinionated handbook on how I migrated all my Rails apps off the cloud and into VPS.
This is how I manage real production loads for my Rails apps. It assumes:
- Rails 7+
- Ruby 3+
- PostgreSQL
- Ubuntu Server 24.04
- Capistrano, Puma, Nginx
| #!/bin/bash | |
| # This script takes a clean Ubuntu Server 24.04 LTS image and installs and configures | |
| # everything needed to deploy a production-ready PostgreSQL server. | |
| set -euo pipefail | |
| # --- AESTHETICS --- | |
| GREEN='\033[0;32m' |
This is an opinionated handbook on how I migrated all my Rails apps off the cloud and into VPS.
This is how I manage real production loads for my Rails apps. It assumes:
Not all random values are created equal - for security-related code, you need a specific kind of random value.
A summary of this article, if you don't want to read the entire thing:
Math.random(). There are extremely few cases where Math.random() is the right answer. Don't use it, unless you've read this entire article, and determined that it's necessary for your case.crypto.getRandomBytes directly. While it's a CSPRNG, it's easy to bias the result when 'transforming' it, such that the output becomes more predictable.uuid, specifically the uuid.v4() method. Avoid node-uuid - it's not the same package, and doesn't produce reliably secure random values.random-number-csprng.You should seriously consider reading the entire article, though - it's
| import React from 'react'; | |
| export default class EventComponent extends React.Component { | |
| constructor(props) { | |
| super(props); | |
| this._onTouchStart = this._onTouchStart.bind(this); | |
| this._onTouchMove = this._onTouchMove.bind(this); | |
| this._onTouchEnd = this._onTouchEnd.bind(this); |