dockerfile-rails 1.5.0 → 1.5.2
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/README.md +1 -0
- data/lib/dockerfile-rails/scanner.rb +6 -2
- data/lib/generators/dockerfile_generator.rb +78 -26
- data/lib/generators/templates/_install_node.erb +1 -1
- data/lib/generators/templates/_nginx.erb +3 -3
- data/lib/generators/templates/_passenger.erb +3 -3
- data/lib/generators/templates/docker-compose.yml.erb +8 -0
- data/lib/generators/templates/docker-entrypoint.erb +1 -1
- data/lib/generators/templates/fly.toml.erb +1 -1
- data/lib/generators/templates/sentry.rb.erb +13 -0
- metadata +4 -3
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: d8ce323b4347b43694278ab3b78c36c300deef6c88acff15e3a5c6e66ef5a0ad
|
4
|
+
data.tar.gz: 507e7a76e5f38761f3d729b665d93f231185ffc07edd3665ca88a034244a1dc3
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: d9d99879f76d1e9d1e4f601db989b5d6a80e3b4113456827e2b0ab17a495163fb14925c6a6ea34ed760f2921fe482ccfc377e89382e40c10681d3423da6c3f16
|
7
|
+
data.tar.gz: 40a0a469845941a12367aa5f1a7e54f7834a8b07ac081b9bdcf922d30c57d02d75dc994c7b6d1c77e301fac2142e7dcac29551b443286a9c51342582ac043aaa
|
data/README.md
CHANGED
@@ -44,6 +44,7 @@ bin/rails generate dockerfile
|
|
44
44
|
* `--nginx` - serve static files via [nginx](https://www.nginx.com/). May require `--root` on some targets to access `/dev/stdout`
|
45
45
|
* `--no-link` - don't add [--link](https://docs.docker.com/engine/reference/builder/#copy---link) to COPY statements. Some tools (like at the moment, [buildah](https://www.redhat.com/en/topics/containers/what-is-buildah)) don't yet support this feature.
|
46
46
|
* `--no-lock` - don't add linux platforms, set `BUNDLE_DEPLOY`, or `--frozen-lockfile`. May be needed at times to work around a [rubygems bug](https://github.com/rubygems/rubygems/issues/6082#issuecomment-1329756343).
|
47
|
+
* `--sentry` -- install gems and a starter initializer for sentry
|
47
48
|
* `--sudo` - install and configure sudo to enable `sudo -iu rails` access to full environment
|
48
49
|
|
49
50
|
### Add a Database:
|
@@ -44,7 +44,7 @@ module DockerfileRails
|
|
44
44
|
@sqlite3 = true
|
45
45
|
elsif database == "postgresql"
|
46
46
|
@postgresql = true
|
47
|
-
elsif (database == "mysql") || (database == "mysql2")
|
47
|
+
elsif (database == "mysql") || (database == "mysql2") || (database == "trilogy")
|
48
48
|
@mysql = true
|
49
49
|
elsif database == "sqlserver"
|
50
50
|
@sqlserver = true
|
@@ -52,7 +52,7 @@ module DockerfileRails
|
|
52
52
|
|
53
53
|
@sqlite3 = true if @gemfile.include? "sqlite3"
|
54
54
|
@postgresql = true if @gemfile.include? "pg"
|
55
|
-
@mysql = true if @gemfile.include?
|
55
|
+
@mysql = true if @gemfile.include?("mysql2") || using_trilogy?
|
56
56
|
|
57
57
|
### node modules ###
|
58
58
|
|
@@ -81,5 +81,9 @@ module DockerfileRails
|
|
81
81
|
|
82
82
|
@redis = @redis_cable || @redis_cache
|
83
83
|
end
|
84
|
+
|
85
|
+
def using_trilogy?
|
86
|
+
@gemfile.include?("trilogy") || @gemfile.include?("activerecord-trilogy-adapter")
|
87
|
+
end
|
84
88
|
end
|
85
89
|
end
|
@@ -33,12 +33,13 @@ class DockerfileGenerator < Rails::Generators::Base
|
|
33
33
|
"registry" => "",
|
34
34
|
"root" => false,
|
35
35
|
"sqlite3" => false,
|
36
|
+
"sentry" => false,
|
36
37
|
"sudo" => false,
|
37
38
|
"swap" => nil,
|
38
39
|
"variant" => "slim",
|
39
40
|
"windows" => false,
|
40
41
|
"yjit" => false,
|
41
|
-
}.
|
42
|
+
}.yield_self { |hash| Struct.new(*hash.keys.map(&:to_sym)).new(*hash.values) }
|
42
43
|
|
43
44
|
OPTION_DEFAULTS = BASE_DEFAULTS.dup
|
44
45
|
|
@@ -169,6 +170,9 @@ class DockerfileGenerator < Rails::Generators::Base
|
|
169
170
|
class_option :sudo, type: :boolean, default: OPTION_DEFAULTS.sudo,
|
170
171
|
desc: "Install and configure sudo to enable running as rails with full environment"
|
171
172
|
|
173
|
+
class_option :sentry, type: :boolean, default: OPTION_DEFAULTS.sentry,
|
174
|
+
desc: "Install gems and a starter initializer for sentry"
|
175
|
+
|
172
176
|
class_option "migrate", type: :string, default: OPTION_DEFAULTS.migrate,
|
173
177
|
desc: "custom migration/db:prepare script"
|
174
178
|
|
@@ -282,17 +286,19 @@ class DockerfileGenerator < Rails::Generators::Base
|
|
282
286
|
fly_attach_consul
|
283
287
|
end
|
284
288
|
|
285
|
-
if
|
289
|
+
if File.exist?("fly.toml") && (fly_processes || !options.prepare || options.swap)
|
286
290
|
if File.stat("fly.toml").size > 0
|
287
291
|
template "fly.toml.erb", "fly.toml"
|
288
292
|
else
|
289
|
-
toml =
|
290
|
-
if toml !=
|
291
|
-
File.write "fly.toml", toml
|
292
|
-
end
|
293
|
+
toml = fly_make_toml
|
294
|
+
File.write "fly.toml", toml if toml != ""
|
293
295
|
end
|
294
296
|
end
|
295
297
|
|
298
|
+
if options.sentry? && (not File.exist?("config/initializers/sentry.rb"))
|
299
|
+
template "sentry.rb.erb", "config/initializers/sentry.rb"
|
300
|
+
end
|
301
|
+
|
296
302
|
if @gemfile.include?("vite_ruby")
|
297
303
|
package = JSON.load_file("package.json")
|
298
304
|
unless package.dig("scripts", "build")
|
@@ -321,7 +327,7 @@ private
|
|
321
327
|
scope = (Class.new do
|
322
328
|
def initialize(obj, locals)
|
323
329
|
@_obj = obj
|
324
|
-
@_locals = locals.
|
330
|
+
@_locals = locals.yield_self do |hash|
|
325
331
|
return nil if hash.empty?
|
326
332
|
Struct.new(*hash.keys.map(&:to_sym)).new(*hash.values)
|
327
333
|
end
|
@@ -400,6 +406,14 @@ private
|
|
400
406
|
using_node? && options.parallel
|
401
407
|
end
|
402
408
|
|
409
|
+
def has_mysql_gem?
|
410
|
+
@gemfile.include? "mysql2" or using_trilogy?
|
411
|
+
end
|
412
|
+
|
413
|
+
def using_trilogy?
|
414
|
+
@gemfile.include?("trilogy") || @gemfile.include?("activerecord-trilogy-adapter")
|
415
|
+
end
|
416
|
+
|
403
417
|
def keeps?
|
404
418
|
return @keeps if @keeps != nil
|
405
419
|
@keeps = !!Dir["**/.keep"]
|
@@ -419,13 +433,18 @@ private
|
|
419
433
|
end
|
420
434
|
|
421
435
|
if options.mysql? || @mysql
|
422
|
-
system "bundle add mysql2 --skip-install" unless
|
436
|
+
system "bundle add mysql2 --skip-install" unless has_mysql_gem?
|
423
437
|
end
|
424
438
|
|
425
439
|
if options.redis? || using_redis?
|
426
440
|
system "bundle add redis --skip-install" unless @gemfile.include? "redis"
|
427
441
|
end
|
428
442
|
|
443
|
+
if options.sentry?
|
444
|
+
system "bundle add sentry-ruby --skip-install" unless @gemfile.include? "sentry-ruby"
|
445
|
+
system "bundle add sentry-rails --skip-install" unless @gemfile.include? "sentry-rails"
|
446
|
+
end
|
447
|
+
|
429
448
|
# https://stackoverflow.com/questions/70500220/rails-7-ruby-3-1-loaderror-cannot-load-such-file-net-smtp/70500221#70500221
|
430
449
|
if @gemfile.include? "mail"
|
431
450
|
%w(net-smtp net-imap net-pop).each do |gem|
|
@@ -511,7 +530,10 @@ private
|
|
511
530
|
# add databases: sqlite3, postgres, mysql
|
512
531
|
packages << "pkg-config" if options.sqlite3? || @sqlite3
|
513
532
|
packages << "libpq-dev" if options.postgresql? || @postgresql
|
514
|
-
|
533
|
+
|
534
|
+
if (options.mysql? || @mysql) && !using_trilogy?
|
535
|
+
packages << "default-libmysqlclient-dev"
|
536
|
+
end
|
515
537
|
|
516
538
|
# add git if needed to install gems
|
517
539
|
packages << "git" if @git
|
@@ -635,7 +657,7 @@ private
|
|
635
657
|
repos += [
|
636
658
|
"curl https://dl-ssl.google.com/linux/linux_signing_key.pub |",
|
637
659
|
" gpg --dearmor > /etc/apt/trusted.gpg.d/google-archive.gpg &&",
|
638
|
-
'echo "deb http://dl.google.com/linux/chrome/deb/ stable main" >> /etc/apt/sources.list.d/google.list'
|
660
|
+
'echo "deb http://dl.google.com/linux/chrome/deb/ stable main" >> /etc/apt/sources.list.d/google-chrome.list'
|
639
661
|
]
|
640
662
|
end
|
641
663
|
|
@@ -714,12 +736,7 @@ private
|
|
714
736
|
end
|
715
737
|
|
716
738
|
if options.jemalloc? && !options.fullstaq?
|
717
|
-
|
718
|
-
env["LD_PRELOAD"] = "/usr/lib/aarch64-linux-gnu/libjemalloc.so.2"
|
719
|
-
else
|
720
|
-
env["LD_PRELOAD"] = "/usr/lib/x86_64-linux-gnu/libjemalloc.so.2"
|
721
|
-
end
|
722
|
-
|
739
|
+
env["LD_PRELOAD"] = "libjemalloc.so.2"
|
723
740
|
env["MALLOC_CONF"] = "dirty_decay_ms:1000,narenas:2,background_thread:true"
|
724
741
|
end
|
725
742
|
|
@@ -857,7 +874,7 @@ private
|
|
857
874
|
# use presence of "pg" or "mysql2" in the bundle as evidence of intent.
|
858
875
|
if options.postgresql? || @postgresql || @gemfile.include?("pg")
|
859
876
|
"postgresql"
|
860
|
-
elsif options.mysql? || @mysql ||
|
877
|
+
elsif options.mysql? || @mysql || has_mysql_gem?
|
861
878
|
"mysql"
|
862
879
|
else
|
863
880
|
"sqlite3"
|
@@ -1042,19 +1059,54 @@ private
|
|
1042
1059
|
system "#{flyctl} consul attach"
|
1043
1060
|
end
|
1044
1061
|
|
1045
|
-
def
|
1062
|
+
def fly_make_toml
|
1046
1063
|
toml = File.read("fly.toml")
|
1047
1064
|
|
1048
|
-
|
1049
|
-
|
1050
|
-
|
1051
|
-
|
1052
|
-
|
1053
|
-
|
1065
|
+
list = fly_processes
|
1066
|
+
if list
|
1067
|
+
if toml.include? "[processes]"
|
1068
|
+
toml.sub!(/\[processes\].*?(\n\n|\n?\z)/m, "[processes]\n" +
|
1069
|
+
list.map { |name, cmd| " #{name} = #{cmd.inspect}" }.join("\n") + '\1')
|
1070
|
+
else
|
1071
|
+
toml += "\n[processes]\n" +
|
1072
|
+
list.map { |name, cmd| " #{name} = #{cmd.inspect}\n" }.join
|
1073
|
+
|
1074
|
+
app = list.has_key?("app") ? "app" : list.keys.first
|
1075
|
+
|
1076
|
+
toml.sub! "[http_service]\n", "\\0 processes = [#{app.inspect}]\n"
|
1077
|
+
end
|
1078
|
+
end
|
1079
|
+
|
1080
|
+
if options.prepare == false
|
1081
|
+
deploy = "[deploy]\n release_command = #{dbprep_command.inspect}\n\n"
|
1082
|
+
if toml.include? "[deploy]"
|
1083
|
+
toml.sub!(/\[deploy\].*?(\n\n|\n?\z)/m, deploy)
|
1084
|
+
else
|
1085
|
+
toml += deploy
|
1086
|
+
end
|
1087
|
+
end
|
1054
1088
|
|
1055
|
-
|
1089
|
+
if options.swap
|
1090
|
+
suffixes = {
|
1091
|
+
"kib" => 1024,
|
1092
|
+
"k" => 1024,
|
1093
|
+
"kb" => 1000,
|
1094
|
+
"mib" => 1048576,
|
1095
|
+
"m" => 1048576,
|
1096
|
+
"mb" => 100000,
|
1097
|
+
"gib" => 1073741824,
|
1098
|
+
"g" => 1073741824,
|
1099
|
+
"gb" => 100000000,
|
1100
|
+
}
|
1056
1101
|
|
1057
|
-
|
1102
|
+
pattern = Regexp.new("^(\\d+)(#{suffixes.keys.join('|')})?$", "i")
|
1103
|
+
|
1104
|
+
match = pattern.match(options.swap.downcase)
|
1105
|
+
|
1106
|
+
if match
|
1107
|
+
size = ((match[1].to_i * (suffixes[match[2]] || 1)) / 1048576.0).round
|
1108
|
+
toml += "swap_size_mb = #{size}"
|
1109
|
+
end
|
1058
1110
|
end
|
1059
1111
|
|
1060
1112
|
toml
|
@@ -20,7 +20,7 @@ RUN curl -sL https://github.com/nodenv/node-build/archive/master.tar.gz | tar xz
|
|
20
20
|
<% if yarn_version < '2' -%>
|
21
21
|
<% if node_version -%> <% else %>RUN<% end %> npm install -g yarn@$YARN_VERSION<% if node_version -%> && \<% end %>
|
22
22
|
<% else -%>
|
23
|
-
<% if (node_version.split('.').map(&:to_i) <=> [16,10,0]) < 0 -%>
|
23
|
+
<% if node_version && (node_version.split('.').map(&:to_i) <=> [16,10,0]) < 0 -%>
|
24
24
|
npm i -g corepack && \
|
25
25
|
<% else -%>
|
26
26
|
corepack enable && \
|
@@ -3,14 +3,14 @@ RUN gem install foreman && \
|
|
3
3
|
<% unless run_as_root? -%>
|
4
4
|
sed -i 's|pid /run|pid /rails/tmp/pids|' /etc/nginx/nginx.conf && \
|
5
5
|
<% end -%>
|
6
|
-
sed -i 's/access_log\s.*;/access_log
|
7
|
-
sed -i 's/error_log\s.*;/error_log
|
6
|
+
sed -i 's/access_log\s.*;/access_log stdout;/' /etc/nginx/nginx.conf && \
|
7
|
+
sed -i 's/error_log\s.*;/error_log stderr info;/' /etc/nginx/nginx.conf
|
8
8
|
|
9
9
|
COPY <<-"EOF" /etc/nginx/sites-available/default
|
10
10
|
server {
|
11
11
|
listen 3000 default_server;
|
12
12
|
listen [::]:3000 default_server;
|
13
|
-
access_log
|
13
|
+
access_log stdout;
|
14
14
|
|
15
15
|
root /rails/public;
|
16
16
|
|
@@ -20,10 +20,10 @@ EOF
|
|
20
20
|
<% end -%>
|
21
21
|
EOF
|
22
22
|
RUN echo "daemon off;" >> /etc/nginx/nginx.conf && \
|
23
|
-
sed -i 's/access_log\s.*;/access_log
|
24
|
-
sed -i 's/error_log\s.*;/error_log
|
23
|
+
sed -i 's/access_log\s.*;/access_log stdout;/' /etc/nginx/nginx.conf && \
|
24
|
+
sed -i 's/error_log\s.*;/error_log stderr info;/' /etc/nginx/nginx.conf && \
|
25
25
|
<% if options['max-idle'] -%>
|
26
26
|
chmod +sx /etc/nginx/sites-enabled/hook_detached_process && \
|
27
27
|
<% end -%>
|
28
28
|
sed -i 's/user www-data/user rails/' /etc/nginx/nginx.conf && \
|
29
|
-
mkdir /var/run/passenger-instreg
|
29
|
+
mkdir /var/run/passenger-instreg
|
@@ -21,8 +21,12 @@ services:
|
|
21
21
|
<% if deploy_database == 'postgresql' -%>
|
22
22
|
- DATABASE_URL=postgres://root:password@postgres-db/
|
23
23
|
<% elsif deploy_database == 'mysql' -%>
|
24
|
+
<% if using_trilogy? -%>
|
25
|
+
- DATABASE_URL=trilogy://root:password@mysql-db/
|
26
|
+
<% else -%>
|
24
27
|
- DATABASE_URL=mysql2://root:password@mysql-db/
|
25
28
|
<% end -%>
|
29
|
+
<% end -%>
|
26
30
|
<% if deploy_database == 'sqlite3' -%>
|
27
31
|
volumes:
|
28
32
|
- ./db:/rails/db
|
@@ -89,7 +93,11 @@ services:
|
|
89
93
|
<% if deploy_database == 'postgresql' -%>
|
90
94
|
- DATABASE_URL=postgres://root:password@postgres-db/
|
91
95
|
<% elsif deploy_database == 'mysql' -%>
|
96
|
+
<% if using_trilogy? -%>
|
97
|
+
- DATABASE_URL=trilogy://root:password@mysql-db/
|
98
|
+
<% else -%>
|
92
99
|
- DATABASE_URL=mysql2://root:password@mysql-db/
|
100
|
+
<% end -%>
|
93
101
|
<% end -%>
|
94
102
|
depends_on:
|
95
103
|
redis-db:
|
@@ -1 +1 @@
|
|
1
|
-
<%=
|
1
|
+
<%= fly_make_toml -%>
|
@@ -0,0 +1,13 @@
|
|
1
|
+
Sentry.init do |config|
|
2
|
+
config.dsn = ENV["SENTRY_DSN"]
|
3
|
+
config.breadcrumbs_logger = [:active_support_logger, :http_logger]
|
4
|
+
|
5
|
+
# Set traces_sample_rate to 1.0 to capture 100%
|
6
|
+
# of transactions for performance monitoring.
|
7
|
+
# We recommend adjusting this value in production.
|
8
|
+
config.traces_sample_rate = 1.0
|
9
|
+
# or
|
10
|
+
config.traces_sampler = lambda do |context|
|
11
|
+
true
|
12
|
+
end
|
13
|
+
end
|
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.5.
|
4
|
+
version: 1.5.2
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Sam Ruby
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2023-
|
11
|
+
date: 2023-07-24 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: rails
|
@@ -52,6 +52,7 @@ files:
|
|
52
52
|
- lib/generators/templates/fly.toml.erb
|
53
53
|
- lib/generators/templates/litefs.yml.erb
|
54
54
|
- lib/generators/templates/node-version.erb
|
55
|
+
- lib/generators/templates/sentry.rb.erb
|
55
56
|
homepage: https://github.com/fly-apps/dockerfile-rails
|
56
57
|
licenses:
|
57
58
|
- MIT
|
@@ -65,7 +66,7 @@ required_ruby_version: !ruby/object:Gem::Requirement
|
|
65
66
|
requirements:
|
66
67
|
- - ">="
|
67
68
|
- !ruby/object:Gem::Version
|
68
|
-
version:
|
69
|
+
version: 2.6.0
|
69
70
|
required_rubygems_version: !ruby/object:Gem::Requirement
|
70
71
|
requirements:
|
71
72
|
- - ">="
|