database_cleaner
database_cleaner copied to clipboard
allow_remote_database_url not working as expected
- ruby:
2.7.2
- rails:
6.0.3.4
- database_cleaner:
1.8.5
- database_cleaner-active_record:
1.8.0
I'm running Rails in development in a Dockerized environment. One of the configured Docker Compose services is a container to run commands (e.g. rails
, rake
, ...) and its RAILS_ENV
is development
. If I accidentally run rspec
in that particular container, my development database gets cleaned, which is not what I want.
I tried configuring DatabaseCleaner.url_whitelist
to include the full URL to the test database. For example:
DatabaseCleaner.url_whitelist = %w[postgres://postgres:postgres@postgres:5432/my_app_test]
But it looks like only base URLs are considered.
Then I tried allowing remote URLs for the test environment alone by adding the following line at the top of support/database_cleaner.rb
:
DatabaseCleaner.allow_remote_database_url = Rails.env.test?
But that's ignored for some reason. I checked if Rails.env.test?
is false
at that point, and it is.
So now I've replaced that line with:
raise StandardError, "Database cleaner expected 'test' environment" unless Rails.env.test?
Which works. But isn't allow_remote_database_url
supposed to do the same? Or am I missing something crucial?
Re DatabaseCleaner.url_allowlist
: This should support regex as well. See README
I tried with rspec by setting ENV['RAILS_ENV'] ||= 'test'
in spec/rails_helper.rb
, but
https://github.com/DatabaseCleaner/database_cleaner/commit/77dece1e145899231a57b0fead8a20f6e43d3d0a caused Rails.env.test?
to return false
.