Create binstub without bundler, document it all agnostically

You can use MRSK with something other than Rails.
This commit is contained in:
David Heinemeier Hansson
2023-02-05 16:23:34 +01:00
parent ebcb297582
commit 10cad5c459
3 changed files with 19 additions and 8 deletions

View File

@@ -1,10 +1,10 @@
# MRSK # MRSK
MRSK deploys Rails apps in containers to servers running Docker with zero downtime. It uses the dynamic reverse-proxy Traefik to hold requests while the new application container is started and the old one is stopped. It works seamlessly across multiple hosts, using SSHKit to execute commands. MRSK deploys web apps in containers to servers running Docker with zero downtime. It uses the dynamic reverse-proxy Traefik to hold requests while the new application container is started and the old one is stopped. It works seamlessly across multiple hosts, using SSHKit to execute commands.
## Installation ## Installation
Install MRSK globally with `gem install mrsk`. Then, inside your app directory, run `mrsk install`. Now edit the new file `config/deploy.yml`. It could look as simple as this: Install MRSK globally with `gem install mrsk`. Then, inside your app directory, run `mrsk init` (or `mrsk init --bundle` within Rails apps where you want a bin/mrsk binstub). Now edit the new file `config/deploy.yml`. It could look as simple as this:
```yaml ```yaml
service: hey service: hey
@@ -20,10 +20,12 @@ env:
- RAILS_MASTER_KEY - RAILS_MASTER_KEY
``` ```
Now you're ready to deploy a multi-arch image to the servers: Then edit your `.env` file to add your registry password as `MRSK_REGISTRY_PASSWORD` (and your `RAILS_MASTER_KEY` for production with a Rails app).
Now you're ready to deploy to the servers:
``` ```
RAILS_MASTER_KEY=123 MRSK_REGISTRY_PASSWORD=pw mrsk deploy mrsk deploy
``` ```
This will: This will:

View File

@@ -74,22 +74,29 @@ class Mrsk::Cli::Main < Mrsk::Cli::Base
end end
end end
desc "install", "Create config stub in config/deploy.yml and binstub in bin/mrsk" desc "init", "Create config stub in config/deploy.yml and env stub in .env"
option :skip_binstub, type: :boolean, default: false, desc: "Skip adding MRSK to the Gemfile and creating bin/mrsk binstub" option :bundle, type: :boolean, default: false, desc: "Add MRSK to the Gemfile and create a bin/mrsk binstub"
def install def init
require "fileutils" require "fileutils"
if (deploy_file = Pathname.new(File.expand_path("config/deploy.yml"))).exist? if (deploy_file = Pathname.new(File.expand_path("config/deploy.yml"))).exist?
puts "Config file already exists in config/deploy.yml (remove first to create a new one)" puts "Config file already exists in config/deploy.yml (remove first to create a new one)"
else else
FileUtils.mkdir_p deploy_file.dirname
FileUtils.cp_r Pathname.new(File.expand_path("templates/deploy.yml", __dir__)), deploy_file FileUtils.cp_r Pathname.new(File.expand_path("templates/deploy.yml", __dir__)), deploy_file
puts "Created configuration file in config/deploy.yml" puts "Created configuration file in config/deploy.yml"
end end
unless options[:skip_binstub] unless (deploy_file = Pathname.new(File.expand_path(".env"))).exist?
FileUtils.cp_r Pathname.new(File.expand_path("templates/template.env", __dir__)), deploy_file
puts "Created .env file"
end
if options[:bundle]
if (binstub = Pathname.new(File.expand_path("bin/mrsk"))).exist? if (binstub = Pathname.new(File.expand_path("bin/mrsk"))).exist?
puts "Binstub already exists in bin/mrsk (remove first to create a new one)" puts "Binstub already exists in bin/mrsk (remove first to create a new one)"
else else
puts "Adding MRSK to Gemfile and bundle..."
`bundle add mrsk` `bundle add mrsk`
`bundle binstubs mrsk` `bundle binstubs mrsk`
puts "Created binstub file in bin/mrsk" puts "Created binstub file in bin/mrsk"

View File

@@ -0,0 +1,2 @@
MRSK_REGISTRY_PASSWORD=change-this
RAILS_MASTER_KEY=another-env