dockerfile-rails 1.6.17 → 1.6.19
Sign up to get free protection for your applications and to get access to all the features.
- 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
|