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.