database_cleaner icon indicating copy to clipboard operation
database_cleaner copied to clipboard

allow_remote_database_url not working as expected

Open wout opened this issue 4 years ago • 2 comments

  • 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?

wout avatar Oct 11 '20 08:10 wout

Re DatabaseCleaner.url_allowlist: This should support regex as well. See README

tmaier avatar Feb 01 '21 09:02 tmaier

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.

takamario avatar Feb 16 '21 21:02 takamario