dockerfile-rails 0.4.5 → 0.4.6

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: a64e87599931293e6cc232a0808acf1c30e93274db4fd3b7ce69b1adf505fae4
4
- data.tar.gz: ac7188e27e291fdeb814d5fe87b7331f092db6fd8d9ddd742a4b325334c3f516
3
+ metadata.gz: a58947d6c45936ce561ae3ddfdd3799773d17c5145fb15ae8013c9b293b53ce1
4
+ data.tar.gz: 0a9aff0df9a5e4688d47fa40fe151f6aabe4cdc8f5010c0e5e5514bd0d013fc8
5
5
  SHA512:
6
- metadata.gz: 0e2a65afdb4224b38b76fbabd6260e0ad81e6d2f375207ae25123bfc9610d1703e13ea15637ba591f078fbaf0200aca95b20e19c510c637c05bc07d096b921d2
7
- data.tar.gz: b4de5328f761669136d22a0f1763c177663a4f683b83069be87f61794da61462cfdf480aadd6125affd54bfdebebafc95907e9e36241f9e3beda2873c314f3c6
6
+ metadata.gz: 44675c3dbac8f26938a990209e821a2974bd330c4ee1ab7a1cf59316ae2a622ed0cfb03ccf0bf6dfe5f776d200dff31ce789c0840c407fcd6fa64c96e88c4d89
7
+ data.tar.gz: 9f37b005a98f99c06d724c25afd61a50cb0d1e3c63391fd252b8a7179493b78624b1dd2ae70df45fedd5b92405f99a44bfc6b980369f194e8caa15d66d79bdaf
data/DEMO.md CHANGED
@@ -1,24 +1,24 @@
1
- If you have Rails and Docker installed on your machine, running each of these demos is a matter of opening a terminal window, navigating to an empty directory, and copy/pasting a block of instructions into that window. Once started, navigate to http://localhost:3000/ to see the results.
1
+ If you have Rails and Docker installed on your machine, running each of these demos is a matter of opening a terminal window, navigating to an empty directory, and copy/pasting a block of instructions into that window. Once started, navigate to http://localhost:3000/ to see the results.
2
2
 
3
3
  # Demo 1 - Minimal
4
4
 
5
5
  Rails provides a _smoke test_ for new applications that makes sure that you have your software configured correctly enough to serve a page. The following deploys that smoke test in production. Once done take a look at the `Dockerfile` file produced.
6
6
 
7
- ```
7
+ ```bash
8
8
  rails new welcome --minimal
9
9
  cd welcome
10
10
  echo 'Rails.application.routes.draw { root "rails/welcome#index" }' > config/routes.rb
11
11
  bundle add dockerfile-rails --group development
12
12
  bin/rails generate dockerfile
13
- docker buildx build . -t rails-welcome
13
+ docker buildx build . -t rails-welcome # add --load to save the image to local Docker
14
14
  docker run -p 3000:3000 -e RAILS_MASTER_KEY=$(cat config/master.key) rails-welcome
15
15
  ```
16
16
 
17
17
  # Demo 2 - Action Cable and Active Record
18
18
 
19
- Real applications involve a network of services. The following demo makes use of PostgreSQL and Redis to display a welcome screen with a live, updating, visitors counter. Once done, take a look at the 'docker-compose.yml` file produced.
19
+ Real applications involve a network of services. The following demo makes use of PostgreSQL and Redis to display a welcome screen with a live, updating, visitors counter. Once done, take a look at the `docker-compose.yml` file produced.
20
20
 
21
- ```
21
+ ```bash
22
22
  rails new welcome --database postgresql
23
23
  cd welcome
24
24
 
@@ -98,7 +98,7 @@ docker compose up
98
98
  This demo deploys a [Create React App](https://create-react-app.dev/) client and a Rails API-only server. Ruby and Rails version information is retrieved from the server and displayed below a spinning React logo. Note that the build process installs the
99
99
  node moddules and ruby gems in parallel.
100
100
 
101
- ```
101
+ ```bash
102
102
  rails new welcome --api
103
103
  cd welcome
104
104
  npx create-react-app client
@@ -160,14 +160,14 @@ While optional, bundling Javascript is a popular choice, and starting with
160
160
  Rails 7 there are three options: esbuild, rollup, and webpack. The
161
161
  the following demonstrates Rails 7 with esbuild:
162
162
 
163
- ```
163
+ ```bash
164
164
  rails new welcome --javascript esbuild
165
165
  cd welcome
166
166
 
167
167
  yarn add react react-dom
168
168
  bin/rails generate controller Time index
169
169
 
170
- cat <<-"EOF" >> app/javascript/application.js
170
+ cat <<-"EOF" >> app/javascript/application.js
171
171
  import "./components/counter"
172
172
  EOF
173
173
 
data/README.md CHANGED
@@ -29,7 +29,7 @@ are actually using. But should you be using DATABASE_URL, for example, at runti
29
29
  additional support may be needed:
30
30
 
31
31
  * `--mysql` - add mysql libraries
32
- * `--posgresql` - add posgresql libraries
32
+ * `--postgresql` - add postgresql libraries
33
33
  * `--redis` - add redis libraries
34
34
  * `--sqlite3` - add sqlite3 libraries
35
35
 
@@ -40,10 +40,31 @@ Optimizations:
40
40
  * `--yjit` - enable [YJIT](https://github.com/ruby/ruby/blob/master/doc/yjit/yjit.md) optimizing compiler
41
41
  * `--swap=n` - allocate swap space. See [falloc options](https://man7.org/linux/man-pages/man1/fallocate.1.html#OPTIONS) for suffixes
42
42
 
43
- Links:
43
+ ## Testing
44
44
 
45
- * [Demos](./DEMO.md)
46
- * [Preparations for Rails 7.1](https://community.fly.io/t/preparations-for-rails-7-1/9512)
47
- * [Rails Dockerfile futures](https://discuss.rubyonrails.org/t/rails-dockerfile-futures/82091/1)
48
- * [Fly Cookbooks](https://fly.io/docs/rails/cookbooks/)
49
- * [app/templates/Dockerfile.tt](https://github.com/rails/rails/blob/main/railties/lib/rails/generators/rails/app/templates/Dockerfile.tt)
45
+ The current testing strategy is to run `rails new` and `generate dockerfile` with various configurations and compare the generated artifacts with expected results. `ARG` values in `Dockerfiles` are masked before comparison.
46
+
47
+ Running all tests, or even a single individual test can be done as follows:
48
+
49
+ ```
50
+ rake test
51
+ ruby test/test_minimal.rb
52
+ ```
53
+
54
+ To assis with this process, outputs of tests can be captured automatically. This is useful when adding new tests and when making a change that affects many tests. Be sure to inspect the output (e.g., by using `git diff`) before committing.
55
+
56
+ ```
57
+ rake test:capture
58
+ TEST_CAPTURE=1 ruby test/test_minimal.rb
59
+ ```
60
+
61
+ ## Links
62
+
63
+ Many of the following links relate to the current development status with respect to Rails 7.1 and will be removed once that is resolved.
64
+
65
+ * [Demos](./DEMO.md) - scripts to copy and paste into an empty directory to launch demo apps
66
+ * [Test Results](./test/results) - expected outputs for each test
67
+ * [Preparations for Rails 7.1](https://community.fly.io/t/preparations-for-rails-7-1/9512) - [Fly.io](https://fly.io/)'s plans and initial discussions with DHH
68
+ * [Rails Dockerfile futures](https://discuss.rubyonrails.org/t/rails-dockerfile-futures/82091/1) - rationale for a generator
69
+ * [Fly Cookbooks](https://fly.io/docs/rails/cookbooks/) - deeper dive into Dockerfile design choices
70
+ * [app/templates/Dockerfile.tt](https://github.com/rails/rails/blob/main/railties/lib/rails/generators/rails/app/templates/Dockerfile.tt) - current Rails 7.1 template
data/Rakefile CHANGED
@@ -1,3 +1,17 @@
1
1
  require "bundler/gem_tasks"
2
2
 
3
3
  # Run `rake release` to release a new version of the gem.
4
+
5
+ require 'rake/testtask'
6
+ Rake::TestTask.new do |t|
7
+ t.libs << "test"
8
+ t.test_files = FileList['test/test*.rb']
9
+ t.verbose = true
10
+ end
11
+
12
+ namespace :test do
13
+ task :capture do
14
+ ENV['TEST_CAPTURE'] = 'true'
15
+ Rake::Task[:test].invoke
16
+ end
17
+ end
@@ -13,6 +13,8 @@ module DockerfileRails
13
13
  @postgresql = true
14
14
  elsif database == 'mysql' or database == 'mysql2'
15
15
  @mysql = true
16
+ elsif database == 'sqlserver'
17
+ @sqlserver = true
16
18
  end
17
19
 
18
20
  ### ruby gems ###
@@ -29,7 +31,10 @@ module DockerfileRails
29
31
  begin
30
32
  gemfile_definition = Bundler::Definition.build('Gemfile', nil, [])
31
33
  @gemfile += gemfile_definition.dependencies.map(&:name)
32
- @git = !gemfile_definition.spec_git_paths.empty?
34
+
35
+ unless ENV['RAILS_ENV'] == 'test'
36
+ @git = !gemfile_definition.spec_git_paths.empty?
37
+ end
33
38
  rescue => error
34
39
  STDERR.puts error.message
35
40
  end
@@ -1,4 +1,5 @@
1
1
  require 'erb'
2
+ require_relative '../dockerfile-rails/scanner.rb'
2
3
 
3
4
  class DockerfileGenerator < Rails::Generators::Base
4
5
  include DockerfileRails::Scanner
@@ -223,13 +224,32 @@ private
223
224
  end
224
225
 
225
226
  def node_version
226
- `node --version`[/\d+\.\d+\.\d+/]
227
+ if File.exist? '.node_version'
228
+ IO.read('.node_version')[/\d+\.\d+\.\d+/]
229
+ else
230
+ `node --version`[/\d+\.\d+\.\d+/]
231
+ end
227
232
  rescue
228
233
  "lts"
229
234
  end
230
235
 
231
236
  def yarn_version
232
- `yarn --version`[/\d+\.\d+\.\d+/]
237
+ package = JSON.parse(IO.read('package.json'))
238
+ if package['packageManager'].to_s.start_with? "yarn@"
239
+ version = package['packageManager'].sub('yarn@', '')
240
+ else
241
+ version = `yarn --version`[/\d+\.\d+\.\d+/]
242
+ system "yarn set version #{version}"
243
+
244
+ # apparently not all versions of yarn will update package.json
245
+ package = JSON.parse(IO.read('package.json'))
246
+ unless package['packageManager']
247
+ package['packageManager'] = "yarn@#{version}"
248
+ IO.write('package.json', JSON.pretty_generate(package))
249
+ end
250
+ end
251
+
252
+ version
233
253
  rescue
234
254
  "latest"
235
255
  end
@@ -8,3 +8,13 @@ RUN 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 -%>
11
+ <% if @sqlserver -%>
12
+ # install freetds required by tiny_tds gem
13
+ RUN wget ftp://ftp.freetds.org/pub/freetds/stable/freetds-1.3.16.tar.gz && \
14
+ tar -xzf freetds-1.3.16.tar.gz && \
15
+ cd freetds-1.3.16 && \
16
+ ./configure --prefix=/usr/local --with-tdsver=7.3 && \
17
+ make && \
18
+ make install
19
+ <% end -%>
20
+
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: 0.4.5
4
+ version: 0.4.6
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-19 00:00:00.000000000 Z
11
+ date: 2023-01-21 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: rails
@@ -46,11 +46,11 @@ files:
46
46
  - lib/generators/templates/docker-entrypoint.erb
47
47
  - lib/generators/templates/dockerignore.erb
48
48
  - lib/generators/templates/node-version.erb
49
- homepage: https://github.com/rubys/docker-rails
49
+ homepage: https://github.com/rubys/dockerfile-rails
50
50
  licenses:
51
51
  - MIT
52
52
  metadata:
53
- homepage_uri: https://github.com/rubys/docker-rails
53
+ homepage_uri: https://github.com/rubys/dockerfile-rails
54
54
  post_install_message:
55
55
  rdoc_options: []
56
56
  require_paths: