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