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