commands are more straightforward and less abstract • a simpler alternative to Kubernetes or Docker Swarm • deploy anywhere, from bare metal to cloud VMs • compress the complexity of going to production • SSHKit + Traefik + Docker
complicated AF • Ansible, Chef,Puppet,… are configuration management tools, not made for deployment • Docker Swarm is declerative and can get finnicky • Dokku is like Linux: free only if your time has no value
• Includes server set up, zero-downtime deploys, rolling restarts, easy rollback, deploy locks, logs grep,… • Deploy across multiple clouds or on personal hardware • Support for accessories like Redis, memcached, Postgres, MySql,… via their own Dockerfile in a designated or same server
Try Fly.io or Render • Get away from Big Cloud™ • Hetzner, DigitalOcean, Linode,… Raspberry Pi? • Stop dealing with k8s, Dokku,… • Fun to try out and learn something new
like this: Post.joins(:comments).select( posts: { id: :post_id, title: :post_title }, comments: { id: :comment_id, body: :comment_body} ) # In place of this: Post.joins(:comments).select( "posts.id as post_id, posts.title as post_title, comments.id as comment_id, comments.body as comment_body" )
password: “rails4ever” ) • lazaronixon/authentication-zero • passkeys (WebAuthn) class User < ApplicationRecord has_secure_password generates_token_for :password_reset, expires_in: 15.minutes do # Last 10 characters of password salt, changes when password is updated: password_salt&.last(10) end end user = User.first token = user.generate_token_for(:password_reset) User.find_by_token_for(:password_reset, token) # => user # 16 minutes later... User.find_by_token_for(:password_reset, token) # => nil
will accept any locals as keyword arguments • Now you can define what locals a template should accept via locals magic comment <%# locals: (message:) -%> <%= message %> You can also set default values for these locals: <%# locals: (message: "Hello, world!") -%> <%= message %> If you want to disable the use of locals entirely, you can do so like this: <%# locals: () %>
allocator • More code now gets JIT compiled • For Shopify: • 13% faster than 3.2 YJIT • 15% faster than 3.3 without YJIT • For Basecamp: • +24% faster on the median, +12% on the average