dockerfile-rails 1.0.0 → 1.0.2

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