dockerfile-rails 1.5.1 → 1.5.3
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/README.md +4 -0
- data/lib/generators/dockerfile_generator.rb +51 -8
- data/lib/generators/templates/_nginx.erb +4 -4
- data/lib/generators/templates/_passenger.erb +4 -4
- data/lib/generators/templates/docker-entrypoint.erb +1 -1
- data/lib/generators/templates/rollbar.rb.erb +73 -0
- data/lib/generators/templates/sentry.rb.erb +17 -0
- metadata +4 -2
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: b14b8dc852c4d34ae6fa48251cb680e89a9c08fe81942d336d21f18418643e38
|
4
|
+
data.tar.gz: 3d61361b94688abd9545d59a43cb22fda5fc4ecd947353a7397ee88e5cfa0b68
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: becc43052f96c77dc89fa920039c43151737bfd284a8b533185e7334989506b28db8c6ab87da9748712c9c52de0cb7b344ef0308992d4306fc7b47a6be0eeac6
|
7
|
+
data.tar.gz: 11210697f2034ea5295611f7b6548cad9e5712bdd8906e0acc083edde2e35404f51c22fb2624d8e4c087c02be7319c6f71a7f76d98f5054f85d6472012767fbc
|
data/README.md
CHANGED
@@ -46,6 +46,10 @@ bin/rails generate dockerfile
|
|
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
47
|
* `--sudo` - install and configure sudo to enable `sudo -iu rails` access to full environment
|
48
48
|
|
49
|
+
#### Error Tracking & Alerting:
|
50
|
+
* `--rollbar` - install gem and a default initializer for [Rollbar](https://rollbar.com/#)
|
51
|
+
* `--sentry` - install gems and a default initializer for [Sentry](https://sentry.io/welcome/)
|
52
|
+
|
49
53
|
### Add a Database:
|
50
54
|
|
51
55
|
Generally the dockerfile generator will be able to determine what dependencies you
|
@@ -31,8 +31,10 @@ class DockerfileGenerator < Rails::Generators::Base
|
|
31
31
|
"procfile" => "",
|
32
32
|
"redis" => false,
|
33
33
|
"registry" => "",
|
34
|
+
"rollbar" => false,
|
34
35
|
"root" => false,
|
35
36
|
"sqlite3" => false,
|
37
|
+
"sentry" => false,
|
36
38
|
"sudo" => false,
|
37
39
|
"swap" => nil,
|
38
40
|
"variant" => "slim",
|
@@ -169,6 +171,12 @@ class DockerfileGenerator < Rails::Generators::Base
|
|
169
171
|
class_option :sudo, type: :boolean, default: OPTION_DEFAULTS.sudo,
|
170
172
|
desc: "Install and configure sudo to enable running as rails with full environment"
|
171
173
|
|
174
|
+
class_option :sentry, type: :boolean, default: OPTION_DEFAULTS.sentry,
|
175
|
+
desc: "Install gems and a default initializer for Sentry"
|
176
|
+
|
177
|
+
class_option :rollbar, type: :boolean, default: OPTION_DEFAULTS.rollbar,
|
178
|
+
desc: "Install gem and a default initializer for Rollbar"
|
179
|
+
|
172
180
|
class_option "migrate", type: :string, default: OPTION_DEFAULTS.migrate,
|
173
181
|
desc: "custom migration/db:prepare script"
|
174
182
|
|
@@ -282,7 +290,7 @@ class DockerfileGenerator < Rails::Generators::Base
|
|
282
290
|
fly_attach_consul
|
283
291
|
end
|
284
292
|
|
285
|
-
if File.exist?("fly.toml") && (fly_processes || !options.prepare)
|
293
|
+
if File.exist?("fly.toml") && (fly_processes || !options.prepare || options.swap)
|
286
294
|
if File.stat("fly.toml").size > 0
|
287
295
|
template "fly.toml.erb", "fly.toml"
|
288
296
|
else
|
@@ -291,6 +299,14 @@ class DockerfileGenerator < Rails::Generators::Base
|
|
291
299
|
end
|
292
300
|
end
|
293
301
|
|
302
|
+
if options.sentry? && (not File.exist?("config/initializers/sentry.rb"))
|
303
|
+
template "sentry.rb.erb", "config/initializers/sentry.rb"
|
304
|
+
end
|
305
|
+
|
306
|
+
if options.rollbar? && (not File.exist?("config/initializers/rollbar.rb"))
|
307
|
+
template "rollbar.rb.erb", "config/initializers/rollbar.rb"
|
308
|
+
end
|
309
|
+
|
294
310
|
if @gemfile.include?("vite_ruby")
|
295
311
|
package = JSON.load_file("package.json")
|
296
312
|
unless package.dig("scripts", "build")
|
@@ -432,6 +448,15 @@ private
|
|
432
448
|
system "bundle add redis --skip-install" unless @gemfile.include? "redis"
|
433
449
|
end
|
434
450
|
|
451
|
+
if options.sentry?
|
452
|
+
system "bundle add sentry-ruby --skip-install" unless @gemfile.include? "sentry-ruby"
|
453
|
+
system "bundle add sentry-rails --skip-install" unless @gemfile.include? "sentry-rails"
|
454
|
+
end
|
455
|
+
|
456
|
+
if options.rollbar?
|
457
|
+
system "bundle add rollbar --skip-install" unless @gemfile.include? "rollbar"
|
458
|
+
end
|
459
|
+
|
435
460
|
# https://stackoverflow.com/questions/70500220/rails-7-ruby-3-1-loaderror-cannot-load-such-file-net-smtp/70500221#70500221
|
436
461
|
if @gemfile.include? "mail"
|
437
462
|
%w(net-smtp net-imap net-pop).each do |gem|
|
@@ -644,7 +669,7 @@ private
|
|
644
669
|
repos += [
|
645
670
|
"curl https://dl-ssl.google.com/linux/linux_signing_key.pub |",
|
646
671
|
" gpg --dearmor > /etc/apt/trusted.gpg.d/google-archive.gpg &&",
|
647
|
-
'echo "deb http://dl.google.com/linux/chrome/deb/ stable main" >> /etc/apt/sources.list.d/google.list'
|
672
|
+
'echo "deb http://dl.google.com/linux/chrome/deb/ stable main" >> /etc/apt/sources.list.d/google-chrome.list'
|
648
673
|
]
|
649
674
|
end
|
650
675
|
|
@@ -723,12 +748,7 @@ private
|
|
723
748
|
end
|
724
749
|
|
725
750
|
if options.jemalloc? && !options.fullstaq?
|
726
|
-
|
727
|
-
env["LD_PRELOAD"] = "/usr/lib/aarch64-linux-gnu/libjemalloc.so.2"
|
728
|
-
else
|
729
|
-
env["LD_PRELOAD"] = "/usr/lib/x86_64-linux-gnu/libjemalloc.so.2"
|
730
|
-
end
|
731
|
-
|
751
|
+
env["LD_PRELOAD"] = "libjemalloc.so.2"
|
732
752
|
env["MALLOC_CONF"] = "dirty_decay_ms:1000,narenas:2,background_thread:true"
|
733
753
|
end
|
734
754
|
|
@@ -1078,6 +1098,29 @@ private
|
|
1078
1098
|
end
|
1079
1099
|
end
|
1080
1100
|
|
1101
|
+
if options.swap
|
1102
|
+
suffixes = {
|
1103
|
+
"kib" => 1024,
|
1104
|
+
"k" => 1024,
|
1105
|
+
"kb" => 1000,
|
1106
|
+
"mib" => 1048576,
|
1107
|
+
"m" => 1048576,
|
1108
|
+
"mb" => 100000,
|
1109
|
+
"gib" => 1073741824,
|
1110
|
+
"g" => 1073741824,
|
1111
|
+
"gb" => 100000000,
|
1112
|
+
}
|
1113
|
+
|
1114
|
+
pattern = Regexp.new("^(\\d+)(#{suffixes.keys.join('|')})?$", "i")
|
1115
|
+
|
1116
|
+
match = pattern.match(options.swap.downcase)
|
1117
|
+
|
1118
|
+
if match
|
1119
|
+
size = ((match[1].to_i * (suffixes[match[2]] || 1)) / 1048576.0).round
|
1120
|
+
toml += "swap_size_mb = #{size}"
|
1121
|
+
end
|
1122
|
+
end
|
1123
|
+
|
1081
1124
|
toml
|
1082
1125
|
end
|
1083
1126
|
end
|
@@ -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 <% unless run_as_root? %>\/dev\/<% end %>stdout;/' /etc/nginx/nginx.conf && \
|
7
|
+
sed -i 's/error_log\s.*;/error_log <% unless run_as_root? %>\/dev\/<% end %>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 <% unless run_as_root? %>/dev/<% end %>stdout;
|
14
14
|
|
15
15
|
root /rails/public;
|
16
16
|
|
@@ -28,7 +28,7 @@ server {
|
|
28
28
|
|
29
29
|
location @backend {
|
30
30
|
proxy_pass http://localhost:3001;
|
31
|
-
proxy_set_header
|
31
|
+
proxy_set_header Host $http_host;
|
32
32
|
}
|
33
33
|
}
|
34
34
|
EOF
|
@@ -10,6 +10,7 @@ server {
|
|
10
10
|
passenger_pool_idle_time <%= max_idle %>;
|
11
11
|
<% end -%>
|
12
12
|
}
|
13
|
+
EOF
|
13
14
|
<% if options['max-idle'] -%>
|
14
15
|
COPY <<-'EOF' /etc/nginx/sites-enabled/hook_detached_process
|
15
16
|
#!/usr/bin/env ruby
|
@@ -18,12 +19,11 @@ processes = status[/^Processes\s*:\s*(\d*)/, 1].to_i
|
|
18
19
|
system 'nginx -s stop' if processes == 0
|
19
20
|
EOF
|
20
21
|
<% end -%>
|
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
|
@@ -0,0 +1,73 @@
|
|
1
|
+
if ENV['ROLLBAR_ENV']
|
2
|
+
Rollbar.configure do |config|
|
3
|
+
# Without configuration, Rollbar is enabled in all environments.
|
4
|
+
# To disable in specific environments, set config.enabled=false.
|
5
|
+
|
6
|
+
config.access_token = ENV['ROLLBAR_ACCESS_TOKEN']
|
7
|
+
|
8
|
+
# Here we'll disable in 'test':
|
9
|
+
if Rails.env.test?
|
10
|
+
config.enabled = false
|
11
|
+
end
|
12
|
+
|
13
|
+
# By default, Rollbar will try to call the `current_user` controller method
|
14
|
+
# to fetch the logged-in user object, and then call that object's `id`
|
15
|
+
# method to fetch this property. To customize:
|
16
|
+
# config.person_method = "my_current_user"
|
17
|
+
# config.person_id_method = "my_id"
|
18
|
+
|
19
|
+
# Additionally, you may specify the following:
|
20
|
+
# config.person_username_method = "username"
|
21
|
+
# config.person_email_method = "email"
|
22
|
+
|
23
|
+
# If you want to attach custom data to all exception and message reports,
|
24
|
+
# provide a lambda like the following. It should return a hash.
|
25
|
+
# config.custom_data_method = lambda { {:some_key => "some_value" } }
|
26
|
+
|
27
|
+
# Add exception class names to the exception_level_filters hash to
|
28
|
+
# change the level that exception is reported at. Note that if an exception
|
29
|
+
# has already been reported and logged the level will need to be changed
|
30
|
+
# via the rollbar interface.
|
31
|
+
# Valid levels: 'critical', 'error', 'warning', 'info', 'debug', 'ignore'
|
32
|
+
# 'ignore' will cause the exception to not be reported at all.
|
33
|
+
# config.exception_level_filters.merge!('MyCriticalException' => 'critical')
|
34
|
+
#
|
35
|
+
# You can also specify a callable, which will be called with the exception instance.
|
36
|
+
# config.exception_level_filters.merge!('MyCriticalException' => lambda { |e| 'critical' })
|
37
|
+
|
38
|
+
# Enable asynchronous reporting (uses girl_friday or Threading if girl_friday
|
39
|
+
# is not installed)
|
40
|
+
# config.use_async = true
|
41
|
+
# Supply your own async handler:
|
42
|
+
# config.async_handler = Proc.new { |payload|
|
43
|
+
# Thread.new { Rollbar.process_from_async_handler(payload) }
|
44
|
+
# }
|
45
|
+
|
46
|
+
# Enable asynchronous reporting (using sucker_punch)
|
47
|
+
# config.use_sucker_punch
|
48
|
+
|
49
|
+
# Enable delayed reporting (using Sidekiq)
|
50
|
+
# config.use_sidekiq
|
51
|
+
# You can supply custom Sidekiq options:
|
52
|
+
# config.use_sidekiq 'queue' => 'default'
|
53
|
+
|
54
|
+
# If your application runs behind a proxy server, you can set proxy parameters here.
|
55
|
+
# If https_proxy is set in your environment, that will be used. Settings here have precedence.
|
56
|
+
# The :host key is mandatory and must include the URL scheme (e.g. 'http://'), all other fields
|
57
|
+
# are optional.
|
58
|
+
#
|
59
|
+
# config.proxy = {
|
60
|
+
# host: 'http://some.proxy.server',
|
61
|
+
# port: 80,
|
62
|
+
# user: 'username_if_auth_required',
|
63
|
+
# password: 'password_if_auth_required'
|
64
|
+
# }
|
65
|
+
|
66
|
+
# If you run your staging application instance in production environment then
|
67
|
+
# you'll want to override the environment reported by `Rails.env` with an
|
68
|
+
# environment variable like this: `ROLLBAR_ENV=staging`. This is a recommended
|
69
|
+
# setup for Heroku. See:
|
70
|
+
# https://devcenter.heroku.com/articles/deploying-to-a-custom-rails-environment
|
71
|
+
config.environment = ENV['ROLLBAR_ENV'].presence || Rails.env
|
72
|
+
end
|
73
|
+
end
|
@@ -0,0 +1,17 @@
|
|
1
|
+
if ENV["SENTRY_DSN"]
|
2
|
+
|
3
|
+
Sentry.init do |config|
|
4
|
+
config.dsn = ENV["SENTRY_DSN"]
|
5
|
+
config.breadcrumbs_logger = [:active_support_logger, :http_logger]
|
6
|
+
|
7
|
+
# Set traces_sample_rate to 1.0 to capture 100%
|
8
|
+
# of transactions for performance monitoring.
|
9
|
+
# We recommend adjusting this value in production.
|
10
|
+
config.traces_sample_rate = 1.0
|
11
|
+
# or
|
12
|
+
config.traces_sampler = lambda do |context|
|
13
|
+
true
|
14
|
+
end
|
15
|
+
end
|
16
|
+
|
17
|
+
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.3
|
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-08-20 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: rails
|
@@ -52,6 +52,8 @@ 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/rollbar.rb.erb
|
56
|
+
- lib/generators/templates/sentry.rb.erb
|
55
57
|
homepage: https://github.com/fly-apps/dockerfile-rails
|
56
58
|
licenses:
|
57
59
|
- MIT
|