dockerfile-rails 1.6.17 → 1.6.19
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- checksums.yaml +4 -4
- data/lib/fly_replay.rb +29 -0
- data/lib/generators/dockerfile_generator.rb +48 -2
- data/lib/generators/templates/Dockerfile.erb +5 -5
- data/lib/generators/templates/_node_client.erb +1 -1
- data/lib/generators/templates/database.yml.erb +1 -0
- data/lib/generators/templates/docker-compose.yml.erb +14 -9
- metadata +5 -3
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 770d93b1bee2aa9cec4832a7a03b6c3ed8ccbfb82ca6c19a28959ab38f5f4501
|
4
|
+
data.tar.gz: d19ba2048b0c6d2f5d92506ab29dd2c06bdf106d782b4ce3ca45d41c079306a0
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 9dab86fe342a82d18911f2a1fc2d7ec5de69f3b7b3326f1ea9c9fb2945049dbcdd39ac9c125ab524997c16af6f1422b0d73062dfd80ff13044a79b7f0e81996e
|
7
|
+
data.tar.gz: ef62d1ff9359b3e702c0e5a914e39edeeb594bf5c3cc9f5ff2ac8564b974e5ae2bd753f4949d69353a8caf5cdb2ed220daa27255589b0c8f991b60cefd4dbb47
|
data/lib/fly_replay.rb
ADDED
@@ -0,0 +1,29 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
module Fly
|
4
|
+
class FlyReplay
|
5
|
+
def initialize(app)
|
6
|
+
@app = app
|
7
|
+
end
|
8
|
+
|
9
|
+
def call(env)
|
10
|
+
# replay /prometheus/* to the prom proxy in bubblegum
|
11
|
+
if env["PATH_INFO"].starts_with?("/prometheus")
|
12
|
+
return [307, { "Fly-Replay" => "app=flyio-bubblegum-api" }, []]
|
13
|
+
end
|
14
|
+
|
15
|
+
# replay /debug to the debug app. unsure if this is actually used
|
16
|
+
if env["PATH_INFO"].starts_with?("/debug")
|
17
|
+
return [307, { "Fly-Replay" => "app=debug" }, []]
|
18
|
+
end
|
19
|
+
|
20
|
+
@status, @headers, @response = @app.call(env)
|
21
|
+
|
22
|
+
context = OpenTelemetry::Trace.current_span.context
|
23
|
+
@headers["fly-trace-id"] = context.trace_id.unpack1("H*")
|
24
|
+
@headers["fly-span-id"] = context.span_id.unpack1("H*")
|
25
|
+
|
26
|
+
[@status, @headers, @response]
|
27
|
+
end
|
28
|
+
end
|
29
|
+
end
|
@@ -331,6 +331,8 @@ class DockerfileGenerator < Rails::Generators::Base
|
|
331
331
|
|
332
332
|
template "docker-compose.yml.erb", "docker-compose.yml" if options.compose
|
333
333
|
|
334
|
+
template "database.yml.erb", "config/database.yml" if fix_database_config
|
335
|
+
|
334
336
|
if using_litefs?
|
335
337
|
template "litefs.yml.erb", "config/litefs.yml"
|
336
338
|
|
@@ -517,12 +519,16 @@ private
|
|
517
519
|
options.passenger? or options["max-idle"]
|
518
520
|
end
|
519
521
|
|
522
|
+
def includes_jobs?
|
523
|
+
!(Dir["app/jobs/*.rb"] - ["app/jobs/application_job.rb"]).empty?
|
524
|
+
end
|
525
|
+
|
520
526
|
def using_sidekiq?
|
521
|
-
@gemfile.include?("sidekiq")
|
527
|
+
@gemfile.include?("sidekiq") and includes_jobs?
|
522
528
|
end
|
523
529
|
|
524
530
|
def using_solidq?
|
525
|
-
@gemfile.include?("solid_queue")
|
531
|
+
@gemfile.include?("solid_queue") and includes_jobs?
|
526
532
|
end
|
527
533
|
|
528
534
|
def parallel?
|
@@ -1252,6 +1258,19 @@ private
|
|
1252
1258
|
more
|
1253
1259
|
end
|
1254
1260
|
|
1261
|
+
def compose_web_volumes
|
1262
|
+
volumes = %w[ log storage ]
|
1263
|
+
|
1264
|
+
if deploy_database == "sqlite3"
|
1265
|
+
database = YAML.load_file("config/database.yml", aliases: true).dig("production", "database")
|
1266
|
+
if database && database =~ /^\w/
|
1267
|
+
volumes << File.dirname(database)
|
1268
|
+
end
|
1269
|
+
end
|
1270
|
+
|
1271
|
+
volumes.uniq.sort
|
1272
|
+
end
|
1273
|
+
|
1255
1274
|
def max_idle
|
1256
1275
|
option = options["max-idle"]
|
1257
1276
|
|
@@ -1433,4 +1452,31 @@ private
|
|
1433
1452
|
|
1434
1453
|
toml
|
1435
1454
|
end
|
1455
|
+
|
1456
|
+
# if there are multiple production databases defined, allow them all to be
|
1457
|
+
# configured via DATABASE_URL.
|
1458
|
+
def fix_database_config
|
1459
|
+
yaml = IO.read("config/database.yml")
|
1460
|
+
|
1461
|
+
production = YAML.load(yaml, aliases: true)["production"]
|
1462
|
+
return unless production.is_a?(Hash) && production.values.all?(Hash)
|
1463
|
+
return if production.keys == [ "primary" ]
|
1464
|
+
|
1465
|
+
section = yaml[/^(production:.*?)(^\S|\z)/m, 1]
|
1466
|
+
|
1467
|
+
replacement = section.gsub(/( ).*?\n((\1\s+).*?\n)*/) do |subsection|
|
1468
|
+
spaces = $3
|
1469
|
+
name = subsection[/\w+/]
|
1470
|
+
|
1471
|
+
if /^ +url:/.match?(subsection)
|
1472
|
+
subsection
|
1473
|
+
elsif name == "primary"
|
1474
|
+
subsection + spaces + %(url: <%= ENV["DATABASE_URL"] %>\n)
|
1475
|
+
else
|
1476
|
+
subsection + spaces + %(url: <%= URI.parse(ENV["DATABASE_URL"]).tap { |url| url.path += "_#{name}" } if ENV["DATABASE_URL"] %>\n)
|
1477
|
+
end
|
1478
|
+
end
|
1479
|
+
|
1480
|
+
yaml.sub(section, replacement)
|
1481
|
+
end
|
1436
1482
|
end
|
@@ -8,9 +8,9 @@ ARG RUBY_VERSION=<%= RUBY_VERSION %>
|
|
8
8
|
|
9
9
|
<% end -%>
|
10
10
|
<% if options.fullstaq -%>
|
11
|
-
FROM <%= platform %>quay.io/evl.ms/fullstaq-ruby:${RUBY_VERSION}-<%= options.jemalloc ? 'jemalloc-' : 'malloctrim-' %><%= variant %><% unless options.precompile == "defer" %>
|
11
|
+
FROM <%= platform %>quay.io/evl.ms/fullstaq-ruby:${RUBY_VERSION}-<%= options.jemalloc ? 'jemalloc-' : 'malloctrim-' %><%= variant %><% unless options.precompile == "defer" %> AS base<% end %>
|
12
12
|
<% else -%>
|
13
|
-
FROM <%= platform %><%= options.registry %>ruby:$RUBY_VERSION-<%= variant %><% unless options.precompile == "defer" %>
|
13
|
+
FROM <%= platform %><%= options.registry %>ruby:$RUBY_VERSION-<%= variant %><% unless options.precompile == "defer" %> AS base<% end %>
|
14
14
|
<% end -%>
|
15
15
|
|
16
16
|
<% unless options.label.empty? -%>
|
@@ -50,7 +50,7 @@ RUN gem update --system <% if RUBY_VERSION.start_with? '2' %>3.4.22 <% end %>--n
|
|
50
50
|
<% unless options.precompile == "defer" -%>
|
51
51
|
|
52
52
|
# Throw-away build stage<%= parallel? ? 's' : '' %> to reduce size of final image
|
53
|
-
FROM base
|
53
|
+
FROM base AS <%= parallel? ? 'pre' : '' %>build
|
54
54
|
|
55
55
|
<% end -%>
|
56
56
|
# Install packages needed to build gems<%= using_node? ? " and node modules" : "" %>
|
@@ -58,7 +58,7 @@ FROM base as <%= parallel? ? 'pre' : '' %>build
|
|
58
58
|
|
59
59
|
<% if parallel? -%>
|
60
60
|
|
61
|
-
FROM prebuild
|
61
|
+
FROM prebuild AS <% if using_bun? %>bun<% else %>node<% end %>
|
62
62
|
|
63
63
|
<% end -%>
|
64
64
|
<% if using_bun? and (!using_execjs? || File.exist?('bun.lockb')) -%>
|
@@ -72,7 +72,7 @@ FROM prebuild as <% if using_bun? %>bun<% else %>node<% end %>
|
|
72
72
|
<%= render partial: 'npm_install', locals: {sources: Dir[*%w(package.json yarn.lock bun.lockb)]} %>
|
73
73
|
|
74
74
|
|
75
|
-
FROM prebuild
|
75
|
+
FROM prebuild AS build
|
76
76
|
|
77
77
|
<% end -%>
|
78
78
|
<% unless build_args.empty? -%>
|
@@ -0,0 +1 @@
|
|
1
|
+
<%= fix_database_config %>
|
@@ -1,4 +1,5 @@
|
|
1
1
|
version: "3.8"
|
2
|
+
|
2
3
|
services:
|
3
4
|
web:
|
4
5
|
<% if all_args.empty? -%>
|
@@ -18,11 +19,14 @@ services:
|
|
18
19
|
secrets:
|
19
20
|
- gemserver_credentials
|
20
21
|
<% end -%>
|
22
|
+
<% end -%>
|
23
|
+
volumes:
|
24
|
+
<% compose_web_volumes.each do |path| -%>
|
25
|
+
- ./<%= path %>:/rails/<%= path %>
|
21
26
|
<% end -%>
|
22
27
|
ports:
|
23
28
|
- "3000:3000"
|
24
29
|
environment:
|
25
|
-
- RAILS_MASTER_KEY=$RAILS_MASTER_KEY
|
26
30
|
<% if using_redis? -%>
|
27
31
|
- REDIS_URL=redis://redis-db:6379
|
28
32
|
<% end -%>
|
@@ -35,10 +39,9 @@ services:
|
|
35
39
|
- DATABASE_URL=mysql2://root:password@mysql-db/
|
36
40
|
<% end -%>
|
37
41
|
<% end -%>
|
38
|
-
|
39
|
-
|
40
|
-
|
41
|
-
<% end -%>
|
42
|
+
secrets:
|
43
|
+
- source: master_key
|
44
|
+
target: /rails/config/master.key
|
42
45
|
<% if using_redis? or deploy_database != 'sqlite3' -%>
|
43
46
|
depends_on:
|
44
47
|
<% if using_redis? -%>
|
@@ -60,9 +63,7 @@ services:
|
|
60
63
|
POSTGRES_USER: root
|
61
64
|
POSTGRES_PASSWORD: password
|
62
65
|
volumes:
|
63
|
-
- ./tmp/db:/var/lib/postgresql/data
|
64
|
-
ports:
|
65
|
-
- "5432:5432"
|
66
|
+
- ./tmp/postgres-db:/var/lib/postgresql/data
|
66
67
|
healthcheck:
|
67
68
|
test: pg_isready
|
68
69
|
interval: 2s
|
@@ -77,7 +78,7 @@ services:
|
|
77
78
|
environment:
|
78
79
|
MYSQL_ROOT_PASSWORD: password
|
79
80
|
volumes:
|
80
|
-
- ./tmp/db:/var/lib/mysql
|
81
|
+
- ./tmp/mysql-db:/var/lib/mysql
|
81
82
|
healthcheck:
|
82
83
|
test: mysqladmin ping -h 127.0.0.1 -u root --password=password
|
83
84
|
interval: 2s
|
@@ -132,3 +133,7 @@ secrets:
|
|
132
133
|
gemserver_credentials:
|
133
134
|
file: ./GEMSERVER_CREDENTIALS.secret.txt
|
134
135
|
<% end -%>
|
136
|
+
|
137
|
+
secrets:
|
138
|
+
master_key:
|
139
|
+
file: ./config/master.key
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: dockerfile-rails
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 1.6.
|
4
|
+
version: 1.6.19
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Sam Ruby
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2024-
|
11
|
+
date: 2024-09-25 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: rails
|
@@ -37,6 +37,7 @@ files:
|
|
37
37
|
- Rakefile
|
38
38
|
- lib/dockerfile-rails.rb
|
39
39
|
- lib/dockerfile-rails/scanner.rb
|
40
|
+
- lib/fly_replay.rb
|
40
41
|
- lib/generators/dockerfile_generator.rb
|
41
42
|
- lib/generators/templates/Dockerfile.erb
|
42
43
|
- lib/generators/templates/_apt_install.erb
|
@@ -45,6 +46,7 @@ files:
|
|
45
46
|
- lib/generators/templates/_node_client.erb
|
46
47
|
- lib/generators/templates/_npm_install.erb
|
47
48
|
- lib/generators/templates/_passenger.erb
|
49
|
+
- lib/generators/templates/database.yml.erb
|
48
50
|
- lib/generators/templates/docker-compose.yml.erb
|
49
51
|
- lib/generators/templates/docker-entrypoint.erb
|
50
52
|
- lib/generators/templates/dockerfile.yml.erb
|
@@ -74,7 +76,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
74
76
|
- !ruby/object:Gem::Version
|
75
77
|
version: '0'
|
76
78
|
requirements: []
|
77
|
-
rubygems_version: 3.5.
|
79
|
+
rubygems_version: 3.5.14
|
78
80
|
signing_key:
|
79
81
|
specification_version: 4
|
80
82
|
summary: Dockerfile generator for Rails
|