dockerfile-rails 0.4.0 → 0.4.1
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 +12 -2
- data/lib/erbtest.rb +19 -4
- data/lib/generators/dockerfile_generator.rb +28 -2
- data/lib/generators/templates/Dockerfile.erb +8 -31
- data/lib/generators/templates/_node_client.erb +29 -0
- metadata +2 -1
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 7267f137214c8c519555cc4b3775f844eb9f4028a01522b1fee0952301f488a5
|
4
|
+
data.tar.gz: a27afadb1ccc74385cc12ddd4c6dea9445487035c48babd26eaab3c4712d539d
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 5ee1cf151c6521cdc3b29e13008716fa392e49649e6bc9614f095c911805c153e235c75704a3d0c09a6f1ffab9cb5bb3d9db92dac32fd441a7e350418bcee3f7
|
7
|
+
data.tar.gz: 993df0bde29fffa8b637cbf142e28403a02143c697f2df5c95021721b0ef4ba85e8a251d6196d99a1156b07e2f9dd82511c009df9641884892d64ec0ec3052bf
|
data/README.md
CHANGED
@@ -1,6 +1,10 @@
|
|
1
|
-
##
|
1
|
+
## Overview
|
2
2
|
|
3
|
-
|
3
|
+
Provides Rails generators to produce Dockerfiles and related files. This is being proposed as the generator to be included in Rails 7.1, and a substantial number of pull requests along those lines have already been merged. This repository contains fixes and features beyond those pull requests. Highlights:
|
4
|
+
|
5
|
+
* Supports all [Rails supported releases](https://guides.rubyonrails.org/maintenance_policy.html), not just Rails 7.1, and likely works with a number of previous releases.
|
6
|
+
* Can be customized using flags on the `generate dockerfile` command, and rerun to produce a custom tailored dockerfile based on detecting the actual features used by your application.
|
7
|
+
* Can produce a `docker-compose.yml` file for locally testing your configuration before deploying.
|
4
8
|
|
5
9
|
## Usage
|
6
10
|
|
@@ -28,6 +32,12 @@ additional support may be needed:
|
|
28
32
|
* `--redis` - add redis libraries
|
29
33
|
* `--sqlite3` - add sqlite3 libraries
|
30
34
|
|
35
|
+
Optimizations:
|
36
|
+
|
37
|
+
* `--fullstaq` - use [fullstaq](https://fullstaqruby.org/) [images](https://github.com/evilmartians/fullstaq-ruby-docker) on [quay.io](https://quay.io/repository/evl.ms/fullstaq-ruby?tab=tags&tag=latest)
|
38
|
+
* `--jemalloc` - use [jemalloc](https://jemalloc.net/) memory allocator
|
39
|
+
* `--yjit` - enable [YJIT](https://github.com/ruby/ruby/blob/master/doc/yjit/yjit.md) optimizing compiler.
|
40
|
+
|
31
41
|
Links:
|
32
42
|
|
33
43
|
* [Demos](./DEMO.md)
|
data/lib/erbtest.rb
CHANGED
@@ -5,6 +5,7 @@ EOF
|
|
5
5
|
|
6
6
|
require 'delegate'
|
7
7
|
require 'forwardable'
|
8
|
+
require 'ostruct'
|
8
9
|
class Scope < SimpleDelegator
|
9
10
|
end
|
10
11
|
|
@@ -20,14 +21,28 @@ class ShoppingList
|
|
20
21
|
|
21
22
|
values = {one: 'One', three: 'tHrEe'}
|
22
23
|
|
23
|
-
scope = (Class.new
|
24
|
-
|
25
|
-
|
24
|
+
scope = (Class.new do
|
25
|
+
def initialize(obj, locals)
|
26
|
+
@_obj = obj
|
27
|
+
@_locals = OpenStruct.new(locals)
|
28
|
+
end
|
29
|
+
|
30
|
+
def method_missing(method, *args, &block)
|
31
|
+
if @_locals.respond_to? method
|
32
|
+
@_locals.send method, *args, &block
|
33
|
+
else
|
34
|
+
@_obj.send method, *args, &block
|
35
|
+
end
|
36
|
+
end
|
37
|
+
|
38
|
+
def get_binding
|
39
|
+
binding
|
40
|
+
end
|
26
41
|
|
27
42
|
def three
|
28
43
|
3
|
29
44
|
end
|
30
|
-
end).new(self)
|
45
|
+
end).new(self, values)
|
31
46
|
|
32
47
|
puts renderer.result(scope.get_binding)
|
33
48
|
end
|
@@ -1,3 +1,5 @@
|
|
1
|
+
require 'erb'
|
2
|
+
|
1
3
|
class DockerfileGenerator < Rails::Generators::Base
|
2
4
|
include DockerfileRails::Scanner
|
3
5
|
|
@@ -13,7 +15,7 @@ class DockerfileGenerator < Rails::Generators::Base
|
|
13
15
|
class_option :compose, type: :boolean, default: false,
|
14
16
|
desc: 'generate a docker-compose.yml file'
|
15
17
|
|
16
|
-
class_option :
|
18
|
+
class_option :redis, type: :boolean, default: false,
|
17
19
|
desc: 'include redis libraries'
|
18
20
|
|
19
21
|
class_option :sqlite3, aliases: '--sqlite', type: :boolean, default: false,
|
@@ -52,6 +54,30 @@ class DockerfileGenerator < Rails::Generators::Base
|
|
52
54
|
|
53
55
|
private
|
54
56
|
|
57
|
+
def render(options)
|
58
|
+
scope = (Class.new do
|
59
|
+
def initialize(obj, locals)
|
60
|
+
@_obj = obj
|
61
|
+
@_locals = OpenStruct.new(locals)
|
62
|
+
end
|
63
|
+
|
64
|
+
def method_missing(method, *args, &block)
|
65
|
+
if @_locals.respond_to? method
|
66
|
+
@_locals.send method, *args, &block
|
67
|
+
else
|
68
|
+
@_obj.send method, *args, &block
|
69
|
+
end
|
70
|
+
end
|
71
|
+
|
72
|
+
def get_binding
|
73
|
+
binding
|
74
|
+
end
|
75
|
+
end).new(self, options[:locals] || {})
|
76
|
+
|
77
|
+
template = IO.read(File.join(source_paths.last, "_#{options[:partial]}.erb"))
|
78
|
+
ERB.new(template.strip, trim_mode: '-').result(scope.get_binding)
|
79
|
+
end
|
80
|
+
|
55
81
|
def using_node?
|
56
82
|
return @using_node if @using_node != nil
|
57
83
|
@using_node = File.exist? 'package.json'
|
@@ -184,7 +210,7 @@ private
|
|
184
210
|
end
|
185
211
|
|
186
212
|
def depend_on_bootsnap?
|
187
|
-
@gemfile.include? '
|
213
|
+
@gemfile.include? 'bootsnap'
|
188
214
|
end
|
189
215
|
|
190
216
|
def api_only?
|
@@ -3,35 +3,7 @@
|
|
3
3
|
# Make sure RUBY_VERSION matches the Ruby version in .ruby-version and Gemfile
|
4
4
|
ARG RUBY_VERSION=<%= RUBY_VERSION %>
|
5
5
|
<% if api_client_dir -%>
|
6
|
-
|
7
|
-
|
8
|
-
FROM node:$NODE_VERSION-slim as client
|
9
|
-
|
10
|
-
WORKDIR /rails/<%= api_client_dir %>
|
11
|
-
|
12
|
-
ENV NODE_ENV=production
|
13
|
-
|
14
|
-
# Install node modules
|
15
|
-
COPY <%= api_client_files.join(' ') %> .
|
16
|
-
<% if api_client_files.join.include? 'yarn' -%>
|
17
|
-
<% if options.cache? -%>
|
18
|
-
RUN --mount=type=cache,id=bld-yarn-cache,target=/root/.yarn \
|
19
|
-
YARN_CACHE_FOLDER=/root/.yarn yarn install
|
20
|
-
<% else -%>
|
21
|
-
RUN yarn install
|
22
|
-
<% end -%>
|
23
|
-
<% else -%>
|
24
|
-
<% if options.cache? -%>
|
25
|
-
RUN --mount=type=cache,id=bld-yarn-cache,target=/root/.npm \
|
26
|
-
npm install
|
27
|
-
<% else -%>
|
28
|
-
RUN npm install
|
29
|
-
<% end -%>
|
30
|
-
<% end -%>
|
31
|
-
|
32
|
-
# build client application
|
33
|
-
COPY <%= api_client_dir %> .
|
34
|
-
RUN npm run build
|
6
|
+
<%= render partial: 'node_client' %>
|
35
7
|
|
36
8
|
|
37
9
|
<% end -%>
|
@@ -103,12 +75,17 @@ RUN --mount=type=cache,id=bld-gem-cache,sharing=locked,target=/srv/vendor \
|
|
103
75
|
bundle config set app_config .bundle && \
|
104
76
|
bundle config set path /srv/vendor && \
|
105
77
|
bundle _${BUNDLER_VERSION}_ install && \
|
78
|
+
<% if depend_on_bootsnap? -%> && \
|
79
|
+
bundle exec bootsnap precompile --gemfile && \
|
80
|
+
<% end -%>
|
106
81
|
bundle clean && \
|
107
82
|
mkdir -p vendor && \
|
108
83
|
bundle config set path vendor && \
|
109
84
|
cp -ar /srv/vendor .
|
110
85
|
<% else -%>
|
111
|
-
RUN bundle _${BUNDLER_VERSION}_ install
|
86
|
+
RUN bundle _${BUNDLER_VERSION}_ install<% if depend_on_bootsnap? -%> && \
|
87
|
+
bundle exec bootsnap precompile --gemfile
|
88
|
+
<% end -%>
|
112
89
|
<% end -%>
|
113
90
|
|
114
91
|
<% if parallel? -%>
|
@@ -129,7 +106,7 @@ COPY . .
|
|
129
106
|
|
130
107
|
<% if depend_on_bootsnap? -%>
|
131
108
|
# Precompile bootsnap code for faster boot times
|
132
|
-
RUN bundle exec bootsnap precompile
|
109
|
+
RUN bundle exec bootsnap precompile app/ lib/
|
133
110
|
|
134
111
|
<% end -%>
|
135
112
|
<% unless binfile_fixups.empty? -%>
|
@@ -0,0 +1,29 @@
|
|
1
|
+
ARG NODE_VERSION=<%= node_version %>
|
2
|
+
|
3
|
+
FROM node:$NODE_VERSION-slim as client
|
4
|
+
|
5
|
+
WORKDIR /rails/<%= api_client_dir %>
|
6
|
+
|
7
|
+
ENV NODE_ENV=production
|
8
|
+
|
9
|
+
# Install node modules
|
10
|
+
COPY <%= api_client_files.join(' ') %> .
|
11
|
+
<% if api_client_files.join.include? 'yarn' -%>
|
12
|
+
<% if options.cache? -%>
|
13
|
+
RUN --mount=type=cache,id=bld-yarn-cache,target=/root/.yarn \
|
14
|
+
YARN_CACHE_FOLDER=/root/.yarn yarn install
|
15
|
+
<% else -%>
|
16
|
+
RUN yarn install
|
17
|
+
<% end -%>
|
18
|
+
<% else -%>
|
19
|
+
<% if options.cache? -%>
|
20
|
+
RUN --mount=type=cache,id=bld-yarn-cache,target=/root/.npm \
|
21
|
+
npm install
|
22
|
+
<% else -%>
|
23
|
+
RUN npm install
|
24
|
+
<% end -%>
|
25
|
+
<% end -%>
|
26
|
+
|
27
|
+
# build client application
|
28
|
+
COPY <%= api_client_dir %> .
|
29
|
+
RUN npm run build
|
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: dockerfile-rails
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.4.
|
4
|
+
version: 0.4.1
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Sam Ruby
|
@@ -39,6 +39,7 @@ files:
|
|
39
39
|
- lib/erbtest.rb
|
40
40
|
- lib/generators/dockerfile_generator.rb
|
41
41
|
- lib/generators/templates/Dockerfile.erb
|
42
|
+
- lib/generators/templates/_node_client.erb
|
42
43
|
- lib/generators/templates/docker-compose.yml.erb
|
43
44
|
- lib/generators/templates/docker-entrypoint.erb
|
44
45
|
- lib/generators/templates/dockerignore.erb
|