dockerfile-rails 1.0.0 → 1.0.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 CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 67a9e8789b4664b2bcfe089e2e945aa1c2eee3db60adb3681e40f14cd51c2336
4
- data.tar.gz: 830f021a2e7123db896bc8ee0dd990f6e4ee2c72c6bce79677ad84b07e13ab84
3
+ metadata.gz: 0227d5ff2b7d0a0d42d48ba7e3be63280ea528f3f80417a6419dfebbec44b3a7
4
+ data.tar.gz: ee9b4b14b72b85193a6e7b54862f6643b02896c5ff4636b294a845e7ae6a1b35
5
5
  SHA512:
6
- metadata.gz: bc6fe2c172e7643e1cbce78e0e771bcb04db044d59f0125a4b420c6f2edfd984c0edd87402192335d14d6e136d44287e6e6a307bd273675b015aded3827934fe
7
- data.tar.gz: 419134947acae57198255a99166fb16bd907ac5b581e0565a0765530591e2e277e8e4a90814ee0d28fc8db6b791d7e9ff5850d33819a448beafc99eb0593c46c
6
+ metadata.gz: 2e9f99b443c3cab5dca0d5800eb996b7f727ef0dbfcf44ad0e1586edf1ed9691b3cafbf1c608f207a55c63fd9d768e2796c4d3644c3e6715214ca5aa159ae122
7
+ data.tar.gz: 6980319c05859df14c35649159c874271162ff83ac1c2918e4c959c93f6f39b29f5a4002cbf9305f82404ae8b5d00ee4d0e401e420c37a86abb6b0c8362adcf8
data/DEMO.md CHANGED
@@ -275,3 +275,31 @@ bin/rails generate dockerfile
275
275
  docker buildx build . -t rails-welcome
276
276
  docker run -p 3000:3000 -e RAILS_MASTER_KEY=$(cat config/master.key) rails-welcome
277
277
  ```
278
+
279
+ # Demo 5 - Grover / puppeteer / Chrome
280
+
281
+ This demo runs only on Intel hardware as Google doesn't supply Chrome
282
+ binaries for Linux on ARM.
283
+
284
+ ```bash
285
+ rails new welcome --minimal
286
+ cd welcome
287
+ bundle add grover
288
+ npm install puppeteer
289
+
290
+ echo 'Rails.application.routes.draw { root "grover#pdf" }' > config/routes.rb
291
+
292
+ cat << 'EOF' > app/controllers/grover_controller.rb
293
+ class GroverController < ApplicationController
294
+ def pdf
295
+ grover = Grover.new('https://google.com', format: 'A4')
296
+ send_data grover.to_pdf, filename: 'google.pdf', type: :pdf
297
+ end
298
+ end
299
+ EOF
300
+
301
+ bundle add dockerfile-rails --group development
302
+ bin/rails generate dockerfile
303
+ docker buildx build . -t rails-welcome
304
+ docker run -p 3000:3000 -e RAILS_MASTER_KEY=$(cat config/master.key) rails-welcome
305
+ ```
data/README.md CHANGED
@@ -10,7 +10,7 @@ Provides a Rails generator to produce Dockerfiles and related files. This is be
10
10
  ## Usage
11
11
 
12
12
  ```
13
- bundle add dockerfile-rails --version ">= 0.5.0" --group development
13
+ bundle add dockerfile-rails --optimistic --group development
14
14
  bin/rails generate dockerfile
15
15
  ```
16
16
 
@@ -40,9 +40,7 @@ module DockerfileRails
40
40
  end
41
41
  end
42
42
 
43
- @sidekiq = @gemfile.include? 'sidekiq'
44
43
  @anycable = @gemfile.include? 'anycable-rails'
45
- @rmagick = @gemfile.include? 'rmagick'
46
44
  @vips = @gemfile.include? 'ruby-vips'
47
45
  @bootstrap = @gemfile.include? 'bootstrap'
48
46
  @puppeteer = @gemfile.include? 'puppeteer'
@@ -73,7 +71,7 @@ module DockerfileRails
73
71
  @redis_cache = true
74
72
  end
75
73
 
76
- @redis = @redis_cable || @redis_cache || @sidekiq
74
+ @redis = @redis_cable || @redis_cache
77
75
  end
78
76
  end
79
77
  end
@@ -142,11 +142,19 @@ private
142
142
  end
143
143
 
144
144
  def using_redis?
145
- options.redis? or @redis
145
+ options.redis? or @redis or @gemfile.include?('sidekiq')
146
146
  end
147
147
 
148
148
  def using_execjs?
149
- @gemfile.include? 'execjs'
149
+ @gemfile.include?('execjs') or @gemfile.include?('grover')
150
+ end
151
+
152
+ def using_puppeteer?
153
+ @gemfile.include?('grover') or @gemfile.include?('puppeteer-ruby')
154
+ end
155
+
156
+ def using_sidekiq?
157
+ @gemfile.include?('sidekiq')
150
158
  end
151
159
 
152
160
  def parallel?
@@ -172,6 +180,27 @@ private
172
180
  end
173
181
  end
174
182
 
183
+ def base_packages
184
+ packages = []
185
+
186
+ if using_execjs?
187
+ packages += %w(curl unzip)
188
+ end
189
+
190
+ if using_puppeteer?
191
+ packages += %w(curl gnupg)
192
+ end
193
+
194
+ packages.sort.uniq
195
+ end
196
+
197
+ def base_requirements
198
+ requirements = []
199
+ requirements << 'nodejs' if using_execjs?
200
+ requirements << 'chrome' if using_puppeteer?
201
+ requirements.join(' and ')
202
+ end
203
+
175
204
  def build_packages
176
205
  # start with the essentials
177
206
  packages = %w(build-essential)
@@ -184,7 +213,7 @@ private
184
213
  # add git if needed to install gems
185
214
  packages << 'git' if @git
186
215
 
187
- # add redis in case Action Cable, caching, or sidekiq are added later
216
+ # add redis if Action Cable, caching, or sidekiq are used
188
217
  packages << "redis" if options.redis? or using_redis?
189
218
 
190
219
  # ActiveStorage preview support
@@ -196,7 +225,7 @@ private
196
225
  # node support, including support for building native modules
197
226
  if using_node?
198
227
  packages += %w(node-gyp pkg-config)
199
- packages += %w(curl unzip) unless using_execjs?
228
+ packages += %w(curl unzip) unless using_execjs? or using_puppeteer?
200
229
 
201
230
  # module build process depends on Python, and debian changed
202
231
  # how python is installed with the bullseye release. Below
@@ -236,11 +265,34 @@ private
236
265
  packages << "libvips" if @gemfile.include? 'ruby-vips'
237
266
 
238
267
  # Rmagick gem
239
- packages << 'imagemagick' if @gemfile.include? 'rmagick'
268
+ if @gemfile.include?('rmagick') or @gemfile.include?('mini_magick')
269
+ packages << 'imagemagick'
270
+ end
271
+
272
+ # Puppeteer
273
+ packages << 'google-chrome-stable' if using_puppeteer?
240
274
 
241
275
  packages.sort
242
276
  end
243
277
 
278
+ def deploy_repos
279
+ repos = []
280
+
281
+ if using_puppeteer?
282
+ repos += [
283
+ "curl https://dl-ssl.google.com/linux/linux_signing_key.pub |",
284
+ "gpg --dearmor > /etc/apt/trusted.gpg.d/google-archive.gpg &&",
285
+ 'echo "deb http://dl.google.com/linux/chrome/deb/ stable main" >> /etc/apt/sources.list.d/google.list'
286
+ ]
287
+ end
288
+
289
+ if repos.empty?
290
+ ''
291
+ else
292
+ repos.join(" \\\n ") + " && \\\n "
293
+ end
294
+ end
295
+
244
296
  def deploy_env
245
297
  env = []
246
298
 
@@ -263,6 +315,11 @@ private
263
315
  env << 'MALLOC_CONF="dirty_decay_ms:1000,narenas:2,background_thread:true"'
264
316
  end
265
317
 
318
+ if using_puppeteer?
319
+ env << 'GROVER_NO_SANDBOX="true"' if @gemfile.include? 'grover'
320
+ env << 'PUPPETEER_EXECUTABLE_PATH="/usr/bin/google-chrome"'
321
+ end
322
+
266
323
  env
267
324
  end
268
325
 
@@ -26,10 +26,12 @@ ARG BUNDLER_VERSION=<%= Bundler::VERSION %>
26
26
  RUN gem update --system --no-document && \
27
27
  gem install -N bundler -v ${BUNDLER_VERSION}
28
28
 
29
- <% if using_execjs? -%>
30
- # Install packages needed to install nodejs
31
- <%= render partial: 'apt_install', locals: {packages: %w(curl unzip), clean: true} %>
29
+ <% unless base_requirements.empty? -%>
30
+ # Install packages needed to install <%= base_requirements %>
31
+ <%= render partial: 'apt_install', locals: {packages: base_packages, clean: true, repos: ''} %>
32
32
 
33
+ <% end -%>
34
+ <% if using_execjs? -%>
33
35
  <%= render partial: 'install_node', locals: {yarn_version: nil} %>
34
36
 
35
37
  <% end -%>
@@ -38,15 +40,15 @@ RUN gem update --system --no-document && \
38
40
  FROM base as <%= parallel? ? 'pre' : '' %>build
39
41
 
40
42
  # Install packages needed to build gems<%= using_node? ? " and node modules" : "" %>
41
- <%= render partial: 'apt_install', locals: {packages: build_packages, clean: false} %>
43
+ <%= render partial: 'apt_install', locals: {packages: build_packages, clean: false, repos: ''} %>
42
44
 
43
45
  <% if parallel? -%>
44
46
 
45
47
  FROM prebuild as node
46
48
 
47
49
  <% end -%>
48
- <% if using_node? -%>
49
- <%= render partial: 'install_node', locals: {node_version: using_execjs? ? nil : node_version} %>
50
+ <% if using_node? and (!using_execjs? || File.exist?('yarn.lock')) -%>
51
+ <%= render partial: 'install_node', locals: {node_version: using_execjs? ? nil : node_version, yarn_version: File.exist?('yarn.lock') ? yarn_version : nil} %>
50
52
 
51
53
  <% end -%>
52
54
  <% if parallel? -%>
@@ -81,7 +83,7 @@ RUN bundle _${BUNDLER_VERSION}_ install<% if depend_on_bootsnap? -%> && \
81
83
  COPY --from=node /rails/node_modules /rails/node_modules
82
84
 
83
85
  <% elsif using_node? -%>
84
- <%= render partial: 'npm_install', locals: {sources: %w(package.json yarn.lock)} %>
86
+ <%= render partial: 'npm_install', locals: {sources: Dir[*%w(package.json package-lock.json yarn.lock)]} %>
85
87
 
86
88
  <% end -%>
87
89
  # Copy application code
@@ -112,7 +114,7 @@ FROM base
112
114
  <% unless deploy_packages.empty? -%>
113
115
 
114
116
  # Install packages needed for deployment
115
- <%= render partial: 'apt_install', locals: {packages: deploy_packages, clean: true} %>
117
+ <%= render partial: 'apt_install', locals: {packages: deploy_packages, clean: true, repos: deploy_repos} %>
116
118
  <% end -%>
117
119
 
118
120
  # Copy built application from previous stage
@@ -1,10 +1,10 @@
1
1
  <% if options.cache? -%>
2
2
  RUN --mount=type=cache,id=dev-apt-cache,sharing=locked,target=/var/cache/apt \
3
3
  --mount=type=cache,id=dev-apt-lib,sharing=locked,target=/var/lib/apt \
4
- apt-get update -qq && \
4
+ <%= repos %>apt-get update -qq && \
5
5
  apt-get install --no-install-recommends -y <%= packages.join(" ") %>
6
6
  <% else -%>
7
- RUN apt-get update -qq && \
7
+ RUN <%= repos %>apt-get update -qq && \
8
8
  apt-get install --no-install-recommends -y <%= packages.join(" ") %><% if clean %> && \
9
9
  rm -rf /var/lib/apt/lists /var/cache/apt/archives<% end %>
10
10
  <% end -%>
@@ -17,4 +17,4 @@ RUN apt-get update -qq && \
17
17
  make && \
18
18
  make install
19
19
  <% end -%>
20
-
20
+
@@ -1,4 +1,7 @@
1
1
  # Install node modules
2
+ <% if using_puppeteer? -%>
3
+ ENV PUPPETEER_SKIP_CHROMIUM_DOWNLOAD="true"
4
+ <% end -%>
2
5
  COPY <%=sources.join(' ') %> .
3
6
  <% if sources.join.include? 'yarn' -%>
4
7
  <% if options.cache? -%>
@@ -14,4 +17,4 @@ RUN --mount=type=cache,id=bld-npm-cache,target=/root/.npm \
14
17
  <% else -%>
15
18
  RUN npm install
16
19
  <% end -%>
17
- <% end -%>
20
+ <% end -%>
@@ -68,4 +68,27 @@ services:
68
68
 
69
69
  redis-db:
70
70
  image: redis
71
+ <% end -%>
72
+ <% if using_sidekiq? and deploy_database != 'sqlite3' -%>
73
+
74
+ sidekiq:
75
+ build: .
76
+ environment:
77
+ - RAILS_MASTER_KEY=$RAILS_MASTER_KEY
78
+ - REDIS_URL=redis://redis-db:6379
79
+ <% if deploy_database == 'postgresql' -%>
80
+ - DATABASE_URL=postgres://root:password@postgres-db/
81
+ <% elsif deploy_database == 'mysql' -%>
82
+ - DATABASE_URL=mysql2://root:password@mysql-db/
83
+ <% end -%>
84
+ depends_on:
85
+ redis-db:
86
+ condition: service_started
87
+ <% if deploy_database == 'postgresql' -%>
88
+ postgres-db:
89
+ condition: service_healthy
90
+ <% elsif deploy_database == 'mysql' -%>
91
+ mysql-db:
92
+ condition: service_healthy
93
+ <% end -%>
71
94
  <% 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.0.0
4
+ version: 1.0.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-01-29 00:00:00.000000000 Z
11
+ date: 2023-02-01 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: rails