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
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:
All possible locales: | |
en-IE = €1,205.34 | |
ro-MD = 1.205,34 MDL | |
br = ¤ 1 205,34 | |
en-GY = $1,205 | |
es-GT = Q1,205.34 | |
shi-Tfng-M = 1 205,34MAD |
This is simple implementation of technologies in hobby project of mine built in Rails7 where I need direct upload to S3.
<!DOCTYPE html> | |
<html lang="en"> | |
<head> | |
<meta charset="UTF-8" /> | |
<meta name="viewport" content="width=device-width, initial-scale=1" /> | |
<title>Alpine.js Modal Dialog</title> | |
<style> | |
[x-cloak] { | |
display: none !important; | |
} |
import React, { useEffect, useState } from 'react' | |
import PropTypes from 'prop-types' | |
import Helmet from 'react-helmet' | |
import classNames from 'classnames/bind' | |
import s from './WistiaEmbed.module.scss' | |
const cn = classNames.bind(s) | |
const WistiaEmbed = ({ id, play = false, style, options }) => { | |
// const el = useRef() |
<% if flash.any? %> | |
<div class="fixed inset-0 flex items-end justify-center px-4 py-6 pointer-events-none sm:p-6 sm:items-start sm:justify-end z-50" data-flash-notifications='true'> | |
<% flash.each do |msg_type, msg| %> | |
<div x-data="{flashVisible: false, flashType: '<%= msg_type %>'}" x-show='flashVisible' x-init="() => {flashVisible=true; setTimeout(() => {flashVisible=false}, 5000)}" class="max-w-sm w-full bg-white shadow-lg rounded-lg pointer-events-auto" | |
x-transition:enter="transition ease-out duration-300" | |
x-transition:enter-start="translate-y-2 opacity-0 sm:translate-y-0 sm:translate-x-2" | |
x-transition:enter-end="translate-y-0 opacity-100 sm:translate-x-0" | |
x-transition:leave="transition ease-out duration-100" |
<%= form_with(model: billboard) do |form| %> | |
<%= tag.div class: "dropzone", data: { controller: "dropzone", dropzone_param_name_value: "billboard[images][]", dropzone_url_value: rails_direct_uploads_url, dropzone_accepted_files_value: "image/*", dropzone_max_files_value: 3, dropzone_max_filesize_value: 0.300 } do %> | |
<div class="dz-default dz-message flex flex-col items-center"> | |
<%= image_tag "upload.svg", size: 28, class: "colorize-black", aria: { hidden: true } %> | |
<h5 class="font-semibold mbs-4">Drop files here or click to upload.</h5> | |
<p class="text-sm text-subtle">Upload up to 10 files.</p> | |
</div> | |
<% end %> | |
<div class="inline-flex items-center mbs-2 mie-1"> |