Skip to content

Commit 354d1c4

Browse files
authored
Merge pull request rails#50463 from Shopify/remove-sqlite3-production-warning
Remove SQLite production warning but leave production config disabled
2 parents e7f2db6 + 6b446be commit 354d1c4

File tree

7 files changed

+25
-83
lines changed

7 files changed

+25
-83
lines changed

.github/workflows/rails-new-docker.yml

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -33,6 +33,7 @@ jobs:
3333
podman run --name $APP_NAME \
3434
-v $(pwd):$(pwd) \
3535
-e SECRET_KEY_BASE_DUMMY=1 \
36+
-e DATABASE_URL=sqlite3:storage/production.sqlite3 \
3637
-p 3000:3000 $APP_NAME &
3738
- name: Test container
3839
run: ruby -r ./.github/workflows/scripts/test-container.rb

activerecord/CHANGELOG.md

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,12 @@
1+
* Remove warning message when running SQLite in production, but leave it unconfigured
2+
3+
There are valid use cases for running SQLite in production, however it must be done
4+
with care, so instead of a warning most users won't see anyway, it's preferable to
5+
leave the configuration commented out to force them to think about having the database
6+
on a persistent volume etc.
7+
8+
*Jacopo Beschi*, *Jean Boussier*
9+
110
* Add support for generated columns in SQLite3 adapter
211

312
Generated columns (both stored and dynamic) are supported since version 3.31.0 of SQLite.

activerecord/lib/active_record/railtie.rb

Lines changed: 7 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -31,7 +31,6 @@ class Railtie < Rails::Railtie # :nodoc:
3131
config.active_record.check_schema_cache_dump_version = true
3232
config.active_record.maintain_test_schema = true
3333
config.active_record.has_many_inversing = false
34-
config.active_record.sqlite3_production_warning = true
3534
config.active_record.query_log_tags_enabled = false
3635
config.active_record.query_log_tags = [ :application ]
3736
config.active_record.query_log_tags_format = :legacy
@@ -232,13 +231,13 @@ class Railtie < Rails::Railtie # :nodoc:
232231
end
233232
end
234233

235-
SQLITE3_PRODUCTION_WARN = "You are running SQLite in production, this is generally not recommended."\
236-
" You can disable this warning by setting \"config.active_record.sqlite3_production_warning=false\"."
237-
initializer "active_record.sqlite3_production_warning" do
238-
if config.active_record.sqlite3_production_warning && Rails.env.production?
239-
ActiveSupport.on_load(:active_record_sqlite3adapter) do
240-
Rails.logger.warn(SQLITE3_PRODUCTION_WARN)
241-
end
234+
initializer "active_record.sqlite3_deprecated_warning" do
235+
if config.active_record.key?(:sqlite3_production_warning)
236+
config.active_record.delete(:sqlite3_production_warning)
237+
ActiveRecord.deprecator.warn <<~MSG.squish
238+
The `config.active_record.sqlite3_production_warning` configuration no longer has any effect
239+
and can be safely removed.
240+
MSG
242241
end
243242
end
244243

@@ -278,7 +277,6 @@ class Railtie < Rails::Railtie # :nodoc:
278277
:query_log_tags,
279278
:query_log_tags_format,
280279
:cache_query_log_tags,
281-
:sqlite3_production_warning,
282280
:sqlite3_adapter_strict_strings_by_default,
283281
:check_schema_cache_dump_version,
284282
:use_schema_cache_dump

railties/lib/rails/generators/rails/app/templates/config/databases/sqlite3.yml.tt

Lines changed: 8 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -20,6 +20,13 @@ test:
2020
<<: *default
2121
database: storage/test.sqlite3
2222

23+
24+
# SQLite3 write its data on the local filesystem, as such it requires
25+
# persistent disks. If you are deploying to a managed service, you should
26+
# make sure it provides disk persistence, as many don't.
27+
#
28+
# Similarly, if you deploy your application as a Docker container, you must
29+
# ensure the database is located in a persisted volume.
2330
production:
2431
<<: *default
25-
database: storage/production.sqlite3
32+
# database: path/to/persistent/storage/production.sqlite3

railties/test/application/configuration_test.rb

Lines changed: 0 additions & 71 deletions
Original file line numberDiff line numberDiff line change
@@ -31,17 +31,6 @@ def self.safe_list_sanitizer
3131
end
3232
end
3333

34-
class MyLogRecorder < Logger
35-
def initialize
36-
@io = StringIO.new
37-
super(@io)
38-
end
39-
40-
def recording
41-
@io.string
42-
end
43-
end
44-
4534
module ApplicationTests
4635
class ConfigurationTest < ActiveSupport::TestCase
4736
include ActiveSupport::Testing::Isolation
@@ -79,7 +68,6 @@ def switch_development_hosts_to(*hosts)
7968
def setup
8069
build_app
8170
suppress_default_config
82-
suppress_sqlite3_warning
8371
end
8472

8573
def teardown
@@ -96,14 +84,6 @@ def restore_default_config
9684
FileUtils.mv("#{app_path}/config/__environments__", "#{app_path}/config/environments")
9785
end
9886

99-
def suppress_sqlite3_warning
100-
add_to_config "config.active_record.sqlite3_production_warning = false"
101-
end
102-
103-
def restore_sqlite3_warning
104-
remove_from_config ".*config.active_record.sqlite3_production_warning.*\n"
105-
end
106-
10787
test "Rails.env does not set the RAILS_ENV environment variable which would leak out into rake tasks" do
10888
require "rails"
10989

@@ -4061,57 +4041,6 @@ class Post < ActiveRecord::Base
40614041
assert_equal false, Rails.application.env_config["action_dispatch.log_rescued_responses"]
40624042
end
40634043

4064-
test "logs a warning when running SQLite3 in production" do
4065-
restore_sqlite3_warning
4066-
app_file "config/initializers/active_record.rb", <<~RUBY
4067-
ActiveRecord::Base.establish_connection(adapter: "sqlite3", database: ":memory:")
4068-
RUBY
4069-
add_to_config "config.logger = MyLogRecorder.new"
4070-
4071-
app "production"
4072-
4073-
assert_match(/You are running SQLite in production, this is generally not recommended/, Rails.logger.recording)
4074-
end
4075-
4076-
test "doesn't log a warning when running SQLite3 in production and sqlite3_production_warning=false" do
4077-
app_file "config/initializers/active_record.rb", <<~RUBY
4078-
ActiveRecord::Base.establish_connection(adapter: "sqlite3", database: ":memory:")
4079-
RUBY
4080-
add_to_config "config.logger = MyLogRecorder.new"
4081-
4082-
app "production"
4083-
4084-
assert_no_match(/You are running SQLite in production, this is generally not recommended/, Rails.logger.recording)
4085-
end
4086-
4087-
test "doesn't log a warning when running MySQL in production" do
4088-
restore_sqlite3_warning
4089-
original_configurations = ActiveRecord::Base.configurations
4090-
ActiveRecord::Base.configurations = { production: { db1: { adapter: "mysql2" } } }
4091-
app_file "config/initializers/active_record.rb", <<~RUBY
4092-
ActiveRecord::Base.establish_connection(adapter: "mysql2")
4093-
RUBY
4094-
add_to_config "config.logger = MyLogRecorder.new"
4095-
4096-
app "production"
4097-
4098-
assert_no_match(/You are running SQLite in production, this is generally not recommended/, Rails.logger.recording)
4099-
ensure
4100-
ActiveRecord::Base.configurations = original_configurations
4101-
end
4102-
4103-
test "doesn't log a warning when running SQLite3 in development" do
4104-
restore_sqlite3_warning
4105-
app_file "config/initializers/active_record.rb", <<~RUBY
4106-
ActiveRecord::Base.establish_connection(adapter: "sqlite3", database: ":memory:")
4107-
RUBY
4108-
add_to_config "config.logger = MyLogRecorder.new"
4109-
4110-
app "development"
4111-
4112-
assert_no_match(/You are running SQLite in production, this is generally not recommended/, Rails.logger.recording)
4113-
end
4114-
41154044
test "app starts with LocalCache middleware" do
41164045
app "development"
41174046

railties/test/application/loading_test.rb

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -418,7 +418,6 @@ def test_initialize_can_be_called_at_any_time
418418
end
419419

420420
test "active record query cache hooks are installed before first request in production" do
421-
add_to_config "config.active_record.sqlite3_production_warning = false"
422421
app_file "app/controllers/omg_controller.rb", <<-RUBY
423422
begin
424423
class OmgController < ActionController::Metal

railties/test/application/query_logs_test.rb

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -10,7 +10,6 @@ class QueryLogsTest < ActiveSupport::TestCase
1010

1111
def setup
1212
build_app(multi_db: true)
13-
add_to_config "config.active_record.sqlite3_production_warning = false"
1413
rails("generate", "scaffold", "Pet", "name:string", "--database=animals")
1514
app_file "app/models/user.rb", <<-RUBY
1615
class User < ActiveRecord::Base

0 commit comments

Comments
 (0)