railties 6.0.0.beta3 → 6.0.2.rc2

Sign up to get free protection for your applications and to get access to all the features.
Files changed (69) hide show
  1. checksums.yaml +4 -4
  2. data/CHANGELOG.md +139 -8
  3. data/RDOC_MAIN.rdoc +3 -4
  4. data/README.rdoc +1 -1
  5. data/lib/rails/api/task.rb +1 -0
  6. data/lib/rails/application.rb +6 -3
  7. data/lib/rails/application/bootstrap.rb +2 -10
  8. data/lib/rails/application/configuration.rb +45 -1
  9. data/lib/rails/application/default_middleware_stack.rb +1 -0
  10. data/lib/rails/application/dummy_erb_compiler.rb +18 -0
  11. data/lib/rails/application/finisher.rb +44 -1
  12. data/lib/rails/autoloaders.rb +14 -2
  13. data/lib/rails/command/base.rb +4 -0
  14. data/lib/rails/command/environment_argument.rb +7 -4
  15. data/lib/rails/commands/console/console_command.rb +6 -0
  16. data/lib/rails/commands/credentials/USAGE +1 -1
  17. data/lib/rails/commands/credentials/credentials_command.rb +17 -3
  18. data/lib/rails/commands/dbconsole/dbconsole_command.rb +19 -7
  19. data/lib/rails/commands/dev/dev_command.rb +4 -2
  20. data/lib/rails/commands/encrypted/USAGE +28 -0
  21. data/lib/rails/commands/encrypted/encrypted_command.rb +1 -0
  22. data/lib/rails/commands/initializers/initializers_command.rb +7 -0
  23. data/lib/rails/commands/notes/notes_command.rb +1 -1
  24. data/lib/rails/commands/runner/runner_command.rb +7 -3
  25. data/lib/rails/commands/server/server_command.rb +8 -6
  26. data/lib/rails/engine.rb +35 -36
  27. data/lib/rails/engine/configuration.rb +3 -2
  28. data/lib/rails/gem_version.rb +2 -2
  29. data/lib/rails/generators.rb +2 -0
  30. data/lib/rails/generators/app_base.rb +5 -5
  31. data/lib/rails/generators/app_name.rb +2 -2
  32. data/lib/rails/generators/base.rb +4 -0
  33. data/lib/rails/generators/database.rb +1 -1
  34. data/lib/rails/generators/erb/scaffold/templates/_form.html.erb.tt +6 -3
  35. data/lib/rails/generators/erb/scaffold/templates/show.html.erb.tt +8 -0
  36. data/lib/rails/generators/generated_attribute.rb +36 -10
  37. data/lib/rails/generators/named_base.rb +1 -1
  38. data/lib/rails/generators/rails/app/app_generator.rb +1 -0
  39. data/lib/rails/generators/rails/app/templates/Gemfile.tt +4 -4
  40. data/lib/rails/generators/rails/app/templates/app/javascript/packs/application.js.tt +8 -0
  41. data/lib/rails/generators/rails/app/templates/bin/setup.tt +3 -2
  42. data/lib/rails/generators/rails/app/templates/config/databases/jdbcsqlite3.yml.tt +1 -1
  43. data/lib/rails/generators/rails/app/templates/config/databases/sqlite3.yml.tt +1 -1
  44. data/lib/rails/generators/rails/app/templates/config/environments/development.rb.tt +2 -0
  45. data/lib/rails/generators/rails/app/templates/config/environments/production.rb.tt +2 -0
  46. data/lib/rails/generators/rails/app/templates/config/environments/test.rb.tt +10 -4
  47. data/lib/rails/generators/rails/app/templates/config/initializers/content_security_policy.rb.tt +3 -0
  48. data/lib/rails/generators/rails/app/templates/config/initializers/new_framework_defaults_6_0.rb.tt +12 -0
  49. data/lib/rails/generators/rails/app/templates/config/puma.rb.tt +3 -0
  50. data/lib/rails/generators/rails/app/templates/gitignore.tt +1 -0
  51. data/lib/rails/generators/rails/app/templates/package.json.tt +3 -3
  52. data/lib/rails/generators/rails/app/templates/public/robots.txt +1 -1
  53. data/lib/rails/generators/rails/app/templates/ruby-version.tt +1 -1
  54. data/lib/rails/generators/rails/assets/assets_generator.rb +7 -0
  55. data/lib/rails/generators/rails/db/system/change/change_generator.rb +12 -2
  56. data/lib/rails/generators/rails/plugin/plugin_generator.rb +0 -15
  57. data/lib/rails/generators/rails/plugin/templates/gitignore.tt +1 -0
  58. data/lib/rails/generators/rails/scaffold_controller/scaffold_controller_generator.rb +14 -0
  59. data/lib/rails/generators/rails/scaffold_controller/templates/api_controller.rb.tt +1 -1
  60. data/lib/rails/generators/rails/scaffold_controller/templates/controller.rb.tt +1 -1
  61. data/lib/rails/generators/test_unit/model/templates/fixtures.yml.tt +2 -2
  62. data/lib/rails/generators/test_unit/scaffold/scaffold_generator.rb +7 -2
  63. data/lib/rails/info.rb +1 -1
  64. data/lib/rails/mailers_controller.rb +6 -3
  65. data/lib/rails/source_annotation_extractor.rb +19 -6
  66. data/lib/rails/tasks.rb +1 -0
  67. data/lib/rails/tasks/zeitwerk.rake +66 -0
  68. metadata +18 -13
  69. data/lib/rails/generators/rails/app/templates/bin/update.tt +0 -33
@@ -6,7 +6,7 @@ module Rails
6
6
  class Engine
7
7
  class Configuration < ::Rails::Railtie::Configuration
8
8
  attr_reader :root
9
- attr_accessor :middleware
9
+ attr_accessor :middleware, :javascript_path
10
10
  attr_writer :eager_load_paths, :autoload_once_paths, :autoload_paths
11
11
 
12
12
  def initialize(root = nil)
@@ -14,6 +14,7 @@ module Rails
14
14
  @root = root
15
15
  @generators = app_generators.dup
16
16
  @middleware = Rails::Configuration::MiddlewareStackProxy.new
17
+ @javascript_path = "javascript"
17
18
  end
18
19
 
19
20
  # Holds generators configuration:
@@ -40,7 +41,7 @@ module Rails
40
41
 
41
42
  paths.add "app", eager_load: true,
42
43
  glob: "{*,*/concerns}",
43
- exclude: %w(assets javascript)
44
+ exclude: ["assets", javascript_path]
44
45
  paths.add "app/assets", glob: "*"
45
46
  paths.add "app/controllers", eager_load: true
46
47
  paths.add "app/channels", eager_load: true, glob: "**/*_channel.rb"
@@ -9,8 +9,8 @@ module Rails
9
9
  module VERSION
10
10
  MAJOR = 6
11
11
  MINOR = 0
12
- TINY = 0
13
- PRE = "beta3"
12
+ TINY = 2
13
+ PRE = "rc2"
14
14
 
15
15
  STRING = [MAJOR, MINOR, TINY, PRE].compact.join(".")
16
16
  end
@@ -35,6 +35,8 @@ module Rails
35
35
  rails: {
36
36
  actions: "-a",
37
37
  orm: "-o",
38
+ javascripts: "-j",
39
+ javascript_engine: "-je",
38
40
  resource_controller: "-c",
39
41
  scaffold_controller: "-c",
40
42
  stylesheets: "-y",
@@ -192,7 +192,7 @@ module Rails
192
192
  def web_server_gemfile_entry # :doc:
193
193
  return [] if options[:skip_puma]
194
194
  comment = "Use Puma as the app server"
195
- GemfileEntry.new("puma", "~> 3.11", comment)
195
+ GemfileEntry.new("puma", "~> 4.1", comment)
196
196
  end
197
197
 
198
198
  def include_all_railties? # :doc:
@@ -282,7 +282,7 @@ module Rails
282
282
  ]
283
283
  elsif options.edge?
284
284
  [
285
- GemfileEntry.github("rails", "rails/rails")
285
+ GemfileEntry.github("rails", "rails/rails", "6-0-stable")
286
286
  ]
287
287
  else
288
288
  [GemfileEntry.version("rails",
@@ -307,7 +307,7 @@ module Rails
307
307
  def assets_gemfile_entry
308
308
  return [] if options[:skip_sprockets]
309
309
 
310
- GemfileEntry.version("sass-rails", "~> 5.0", "Use SCSS for stylesheets")
310
+ GemfileEntry.version("sass-rails", ">= 6", "Use SCSS for stylesheets")
311
311
  end
312
312
 
313
313
  def webpacker_gemfile_entry
@@ -316,13 +316,13 @@ module Rails
316
316
  if options.dev? || options.edge?
317
317
  GemfileEntry.github "webpacker", "rails/webpacker", nil, "Use development version of Webpacker"
318
318
  else
319
- GemfileEntry.version "webpacker", ">= 4.0.0.rc.3", "Transpile app-like JavaScript. Read more: https://github.com/rails/webpacker"
319
+ GemfileEntry.version "webpacker", "~> 4.0", "Transpile app-like JavaScript. Read more: https://github.com/rails/webpacker"
320
320
  end
321
321
  end
322
322
 
323
323
  def jbuilder_gemfile_entry
324
324
  comment = "Build JSON APIs with ease. Read more: https://github.com/rails/jbuilder"
325
- GemfileEntry.new "jbuilder", "~> 2.5", comment, {}, options[:api]
325
+ GemfileEntry.new "jbuilder", "~> 2.7", comment, {}, options[:api]
326
326
  end
327
327
 
328
328
  def javascript_gemfile_entry
@@ -7,11 +7,11 @@ module Rails
7
7
 
8
8
  private
9
9
  def app_name
10
- @app_name ||= original_app_name.tr("-", "_")
10
+ @app_name ||= original_app_name.tr('\\', "").tr("-. ", "_")
11
11
  end
12
12
 
13
13
  def original_app_name
14
- @original_app_name ||= (defined_app_const_base? ? defined_app_name : File.basename(destination_root)).tr('\\', "").tr(". ", "_")
14
+ @original_app_name ||= defined_app_const_base? ? defined_app_name : File.basename(destination_root)
15
15
  end
16
16
 
17
17
  def defined_app_name
@@ -24,6 +24,10 @@ module Rails
24
24
  add_runtime_options!
25
25
  strict_args_position!
26
26
 
27
+ def self.exit_on_failure? # :nodoc:
28
+ false
29
+ end
30
+
27
31
  # Returns the source root for this generator using default_source_root as default.
28
32
  def self.source_root(path = nil)
29
33
  @_source_root = path if path
@@ -15,7 +15,7 @@ module Rails
15
15
  case database
16
16
  when "mysql" then ["mysql2", [">= 0.4.4"]]
17
17
  when "postgresql" then ["pg", [">= 0.18", "< 2.0"]]
18
- when "sqlite3" then ["sqlite3", ["~> 1.3", ">= 1.3.6"]]
18
+ when "sqlite3" then ["sqlite3", ["~> 1.4"]]
19
19
  when "oracle" then ["activerecord-oracle_enhanced-adapter", nil]
20
20
  when "frontbase" then ["ruby-frontbase", nil]
21
21
  when "sqlserver" then ["activerecord-sqlserver-adapter", nil]
@@ -4,9 +4,9 @@
4
4
  <h2><%%= pluralize(<%= singular_table_name %>.errors.count, "error") %> prohibited this <%= singular_table_name %> from being saved:</h2>
5
5
 
6
6
  <ul>
7
- <%% <%= singular_table_name %>.errors.full_messages.each do |message| %>
8
- <li><%%= message %></li>
9
- <%% end %>
7
+ <%% <%= singular_table_name %>.errors.full_messages.each do |message| %>
8
+ <li><%%= message %></li>
9
+ <%% end %>
10
10
  </ul>
11
11
  </div>
12
12
  <%% end %>
@@ -21,6 +21,9 @@
21
21
  <div class="field">
22
22
  <%%= form.label :password_confirmation %>
23
23
  <%%= form.password_field :password_confirmation %>
24
+ <% elsif attribute.attachments? -%>
25
+ <%%= form.label :<%= attribute.column_name %> %>
26
+ <%%= form.<%= attribute.field_type %> :<%= attribute.column_name %>, multiple: true %>
24
27
  <% else -%>
25
28
  <%%= form.label :<%= attribute.column_name %> %>
26
29
  <%%= form.<%= attribute.field_type %> :<%= attribute.column_name %> %>
@@ -3,7 +3,15 @@
3
3
  <% attributes.reject(&:password_digest?).each do |attribute| -%>
4
4
  <p>
5
5
  <strong><%= attribute.human_name %>:</strong>
6
+ <% if attribute.attachment? -%>
7
+ <%%= link_to @<%= singular_table_name %>.<%= attribute.column_name %>.filename, @<%= singular_table_name %>.<%= attribute.column_name %> if @<%= singular_table_name %>.<%= attribute.column_name %>.attached? %>
8
+ <% elsif attribute.attachments? -%>
9
+ <%% @<%= singular_table_name %>.<%= attribute.column_name %>.each do |<%= attribute.singular_name %>| %>
10
+ <div><%%= link_to <%= attribute.singular_name %>.filename, <%= attribute.singular_name %> %></div>
11
+ <%% end %>
12
+ <% else -%>
6
13
  <%%= @<%= singular_table_name %>.<%= attribute.column_name %> %>
14
+ <% end -%>
7
15
  </p>
8
16
 
9
17
  <% end -%>
@@ -1,6 +1,7 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  require "active_support/time"
4
+ require "active_support/deprecation"
4
5
 
5
6
  module Rails
6
7
  module Generators
@@ -51,6 +52,12 @@ module Rails
51
52
  type = $1
52
53
  provided_options = $2.split(/[,.-]/)
53
54
  options = Hash[provided_options.map { |opt| [opt.to_sym, true] }]
55
+
56
+ if options[:required]
57
+ ActiveSupport::Deprecation.warn("Passing {required} option has no effect on the model generator. It will be removed in Rails 6.1.\n")
58
+ options.delete(:required)
59
+ end
60
+
54
61
  return type, options
55
62
  else
56
63
  return type, {}
@@ -68,13 +75,15 @@ module Rails
68
75
 
69
76
  def field_type
70
77
  @field_type ||= case type
71
- when :integer then :number_field
72
- when :float, :decimal then :text_field
73
- when :time then :time_select
74
- when :datetime, :timestamp then :datetime_select
75
- when :date then :date_select
76
- when :text then :text_area
77
- when :boolean then :check_box
78
+ when :integer then :number_field
79
+ when :float, :decimal then :text_field
80
+ when :time then :time_select
81
+ when :datetime, :timestamp then :datetime_select
82
+ when :date then :date_select
83
+ when :text then :text_area
84
+ when :rich_text then :rich_text_area
85
+ when :boolean then :check_box
86
+ when :attachment, :attachments then :file_field
78
87
  else
79
88
  :text_field
80
89
  end
@@ -90,7 +99,9 @@ module Rails
90
99
  when :string then name == "type" ? "" : "MyString"
91
100
  when :text then "MyText"
92
101
  when :boolean then false
93
- when :references, :belongs_to then nil
102
+ when :references, :belongs_to,
103
+ :attachment, :attachments,
104
+ :rich_text then nil
94
105
  else
95
106
  ""
96
107
  end
@@ -133,7 +144,7 @@ module Rails
133
144
  end
134
145
 
135
146
  def required?
136
- attr_options[:required]
147
+ reference? && Rails.application.config.active_record.belongs_to_required_by_default
137
148
  end
138
149
 
139
150
  def has_index?
@@ -152,6 +163,22 @@ module Rails
152
163
  type == :token
153
164
  end
154
165
 
166
+ def rich_text?
167
+ type == :rich_text
168
+ end
169
+
170
+ def attachment?
171
+ type == :attachment
172
+ end
173
+
174
+ def attachments?
175
+ type == :attachments
176
+ end
177
+
178
+ def virtual?
179
+ rich_text? || attachment? || attachments?
180
+ end
181
+
155
182
  def inject_options
156
183
  (+"").tap { |s| options_for_migration.each { |k, v| s << ", #{k}: #{v.inspect}" } }
157
184
  end
@@ -163,7 +190,6 @@ module Rails
163
190
  def options_for_migration
164
191
  @attr_options.dup.tap do |options|
165
192
  if required?
166
- options.delete(:required)
167
193
  options[:null] = false
168
194
  end
169
195
 
@@ -213,7 +213,7 @@ module Rails
213
213
  #
214
214
  def self.check_class_collision(options = {}) # :doc:
215
215
  define_method :check_class_collision do
216
- name = if respond_to?(:controller_class_name) # for ResourceHelpers
216
+ name = if respond_to?(:controller_class_name, true) # for ResourceHelpers
217
217
  controller_class_name
218
218
  else
219
219
  class_name
@@ -225,6 +225,7 @@ module Rails
225
225
 
226
226
  def tmp
227
227
  empty_directory_with_keep_file "tmp"
228
+ empty_directory_with_keep_file "tmp/pids"
228
229
  empty_directory "tmp/cache"
229
230
  empty_directory "tmp/cache/assets"
230
231
  end
@@ -28,7 +28,7 @@ ruby <%= "'#{RUBY_VERSION}'" -%>
28
28
 
29
29
  <% if depend_on_bootsnap? -%>
30
30
  # Reduces boot times through caching; required in config/boot.rb
31
- gem 'bootsnap', '>= 1.4.1', require: false
31
+ gem 'bootsnap', '>= 1.4.2', require: false
32
32
 
33
33
  <%- end -%>
34
34
  <%- if options.api? -%>
@@ -69,10 +69,10 @@ group :test do
69
69
  # Adds support for Capybara system testing and selenium driver
70
70
  gem 'capybara', '>= 2.15'
71
71
  gem 'selenium-webdriver'
72
- # Easy installation and use of chromedriver to run system tests with Chrome
73
- gem 'chromedriver-helper'
72
+ # Easy installation and use of web drivers to run system tests with browsers
73
+ gem 'webdrivers'
74
74
  end
75
- <%- end -%>
76
75
 
76
+ <%- end -%>
77
77
  # Windows does not include zoneinfo files, so bundle the tzinfo-data gem
78
78
  gem 'tzinfo-data', platforms: [:mingw, :mswin, :x64_mingw, :jruby]
@@ -13,3 +13,11 @@ require("@rails/activestorage").start()
13
13
  <%- unless options[:skip_action_cable] -%>
14
14
  require("channels")
15
15
  <%- end -%>
16
+
17
+
18
+ // Uncomment to copy all static images under ../images to the output folder and reference
19
+ // them with the image_pack_tag helper in views (e.g <%%= image_pack_tag 'rails.png' %>)
20
+ // or the `imagePath` JavaScript helper below.
21
+ //
22
+ // const images = require.context('../images', true)
23
+ // const imagePath = (name) => images(name, true)
@@ -8,7 +8,8 @@ def system!(*args)
8
8
  end
9
9
 
10
10
  FileUtils.chdir APP_ROOT do
11
- # This script is a starting point to setup your application.
11
+ # This script is a way to setup or update your development environment automatically.
12
+ # This script is idempotent, so that you can run it at anytime and get an expectable outcome.
12
13
  # Add necessary setup steps to this file.
13
14
 
14
15
  puts '== Installing dependencies =='
@@ -27,7 +28,7 @@ FileUtils.chdir APP_ROOT do
27
28
  # end
28
29
 
29
30
  puts "\n== Preparing database =="
30
- system! 'bin/rails db:setup'
31
+ system! 'bin/rails db:prepare'
31
32
  <% end -%>
32
33
 
33
34
  puts "\n== Removing old logs and tempfiles =="
@@ -1,4 +1,4 @@
1
- # SQLite version 3.x
1
+ # SQLite. Versions 3.8.0 and up are supported.
2
2
  # gem 'activerecord-jdbcsqlite3-adapter'
3
3
  #
4
4
  # Configure Using Gemfile
@@ -1,4 +1,4 @@
1
- # SQLite version 3.x
1
+ # SQLite. Versions 3.8.0 and up are supported.
2
2
  # gem install sqlite3
3
3
  #
4
4
  # Ensure the SQLite 3 gem is defined in your Gemfile
@@ -15,9 +15,11 @@ Rails.application.configure do
15
15
  # Enable/disable caching. By default caching is disabled.
16
16
  # Run rails dev:cache to toggle caching.
17
17
  if Rails.root.join('tmp', 'caching-dev.txt').exist?
18
+ <%- unless options.api? -%>
18
19
  config.action_controller.perform_caching = true
19
20
  config.action_controller.enable_fragment_cache_logging = true
20
21
 
22
+ <%- end -%>
21
23
  config.cache_store = :memory_store
22
24
  config.public_file_server.headers = {
23
25
  'Cache-Control' => "public, max-age=#{2.days.to_i}"
@@ -12,7 +12,9 @@ Rails.application.configure do
12
12
 
13
13
  # Full error reports are disabled and caching is turned on.
14
14
  config.consider_all_requests_local = false
15
+ <%- unless options.api? -%>
15
16
  config.action_controller.perform_caching = true
17
+ <%- end -%>
16
18
 
17
19
  # Ensures that a master key has been made available in either ENV["RAILS_MASTER_KEY"]
18
20
  # or in config/master.key. This key is used to decrypt credentials (and other encrypted files).
@@ -1,11 +1,17 @@
1
+ # The test environment is used exclusively to run your application's
2
+ # test suite. You never need to work with it otherwise. Remember that
3
+ # your test database is "scratch space" for the test suite and is wiped
4
+ # and recreated between test runs. Don't rely on the data there!
5
+
1
6
  Rails.application.configure do
2
7
  # Settings specified here will take precedence over those in config/application.rb.
3
8
 
4
- # The test environment is used exclusively to run your application's
5
- # test suite. You never need to work with it otherwise. Remember that
6
- # your test database is "scratch space" for the test suite and is wiped
7
- # and recreated between test runs. Don't rely on the data there!
9
+ <%-# Spring executes the reloaders when files change. %>
10
+ <%- if spring_install? -%>
11
+ config.cache_classes = false
12
+ <%- else -%>
8
13
  config.cache_classes = true
14
+ <%- end -%>
9
15
 
10
16
  # Do not eager load code on boot. This avoids loading your whole application
11
17
  # just for the purpose of running a single test. If you are using a tool that
@@ -23,6 +23,9 @@
23
23
  # If you are using UJS then enable automatic nonce generation
24
24
  # Rails.application.config.content_security_policy_nonce_generator = -> request { SecureRandom.base64(16) }
25
25
 
26
+ # Set the nonce only to specific directives
27
+ # Rails.application.config.content_security_policy_nonce_directives = %w(script-src)
28
+
26
29
  # Report CSP violations to a specified URI
27
30
  # For further information see the following documentation:
28
31
  # https://developer.mozilla.org/en-US/docs/Web/HTTP/Headers/Content-Security-Policy-Report-Only
@@ -16,6 +16,9 @@
16
16
  # It's best enabled when your entire app is migrated and stable on 6.0.
17
17
  # Rails.application.config.action_dispatch.use_cookies_with_metadata = true
18
18
 
19
+ # Change the return value of `ActionDispatch::Response#content_type` to Content-Type header without modification.
20
+ # Rails.application.config.action_dispatch.return_only_media_type_on_content_type = false
21
+
19
22
  # Return false instead of self when enqueuing is aborted from a callback.
20
23
  # Rails.application.config.active_job.return_false_on_aborted_enqueue = true
21
24
 
@@ -23,6 +26,10 @@
23
26
  # Rails.application.config.active_storage.queues.analysis = :active_storage_analysis
24
27
  # Rails.application.config.active_storage.queues.purge = :active_storage_purge
25
28
 
29
+ # When assigning to a collection of attachments declared via `has_many_attached`, replace existing
30
+ # attachments instead of appending. Use #attach to add new attachments without replacing existing ones.
31
+ # Rails.application.config.active_storage.replace_on_assign_to_many = true
32
+
26
33
  # Use ActionMailer::MailDeliveryJob for sending parameterized and normal mail.
27
34
  #
28
35
  # The default delivery jobs (ActionMailer::Parameterized::DeliveryJob, ActionMailer::DeliveryJob),
@@ -31,3 +38,8 @@
31
38
  # MailDeliveryJob to ensure all delivery jobs are processed properly.
32
39
  # Make sure your entire app is migrated and stable on 6.0 before using this setting.
33
40
  # Rails.application.config.action_mailer.delivery_job = "ActionMailer::MailDeliveryJob"
41
+
42
+ # Enable the same cache key to be reused when the object being cached of type
43
+ # `ActiveRecord::Relation` changes by moving the volatile information (max updated at and count)
44
+ # of the relation's cache key into the cache version to support recycling cache key.
45
+ # Rails.application.config.active_record.collection_cache_versioning = true
@@ -16,6 +16,9 @@ port ENV.fetch("PORT") { 3000 }
16
16
  #
17
17
  environment ENV.fetch("RAILS_ENV") { "development" }
18
18
 
19
+ # Specifies the `pidfile` that Puma will use.
20
+ pidfile ENV.fetch("PIDFILE") { "tmp/pids/server.pid" }
21
+
19
22
  # Specifies the number of `workers` to boot in clustered mode.
20
23
  # Workers are forked web server processes. If using threads and workers together
21
24
  # the concurrency of the application would be max `threads` * `workers`.
@@ -11,6 +11,7 @@
11
11
  # Ignore the default SQLite database.
12
12
  /db/*.sqlite3
13
13
  /db/*.sqlite3-journal
14
+ /db/*.sqlite3-*
14
15
 
15
16
  <% end -%>
16
17
  # Ignore all logfiles and tempfiles.