Skip to content

Commit 3ee0142

Browse files
Do not set DATABASE_URL if scheme is unknown (heroku#1715)
* Add support for `trilogy` adapter When using the trilogy gem if you fail to supply a `DATABASE_URL` env variable you'll get an invalid database URL with no scheme. I figure that adding this in the Rails3 class is OK rather than duplicate this in Rails7 or add a Rails71 for it. * Do not set DATABASE_URL if scheme is unknown Reported in heroku#1714 when using a database adapter such as `trilogy`, the application will fail to boot because an invalid DATABASE_URL is constructed (because the `trilogy` adapter is unknown): ``` remote: ensure you can run `$ bundle exec rake -P` against your app remote: and using the production group of your Gemfile. remote: rake aborted! remote: URI::InvalidURIError: bad URI (is not URI?): ://user:pass@127.0.0.1/dbname (URI::InvalidURIError) remote: /tmp/build_b50909c5/vendor/bundle/ruby/3.3.0/gems/uri-1.1.1/lib/uri/rfc2396_parser.rb:176:in `split' remote: /tmp/build_b50909c5/vendor/bundle/ruby/3.3.0/gems/uri-1.1.1/lib/uri/rfc2396_parser.rb:209:in `parse' remote: /tmp/build_b50909c5/vendor/bundle/ruby/3.3.0/gems/activerecord-8.1.2/lib/active_record/database_configurations/connection_url_resolver.rb:27:in `initialize' remote: /tmp/build_b50909c5/vendor/bundle/ruby/3.3.0/gems/activerecord-8.1.2/lib/active_record/database_configurations/url_config.rb:83:in `new' remote: /tmp/build_b50909c5/vendor/bundle/ruby/3.3.0/gems/activerecord-8.1.2/lib/active_record/database_configurations/url_config.rb:83:in `build_url_hash' remote: /tmp/build_b50909c5/vendor/bundle/ruby/3.3.0/gems/activerecord-8.1.2/lib/active_record/database_configurations/url_config.rb:44:in `initialize' ``` Rather than keeping track of all possible adapters we can guard against this case with Rails 4.1+ applications by having customers check in a `config/database.yml` https://devcenter.heroku.com/articles/rails-database-connection-behavior. --------- Co-authored-by: Danny Fallon <danny.fallon.ie+github@gmail.com>
1 parent cd2d5f7 commit 3ee0142

5 files changed

Lines changed: 17 additions & 2 deletions

File tree

CHANGELOG.md

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,7 @@
22

33
## [Unreleased]
44

5+
- Fix bug where an invalid DATABASE_URL is set when the adapter is not known (https://github.com/heroku/heroku-buildpack-ruby/pull/1715).
56

67
## [v347] - 2026-02-02
78

hatchet.json

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -26,7 +26,8 @@
2626
"sharpstone/rails61",
2727
"sharpstone/rails-jsbundling",
2828
"sharpstone/rails_8_ruby_schema",
29-
"sharpstone/rails_8_sql_schema"
29+
"sharpstone/rails_8_sql_schema",
30+
"sharpstone/rails_8_1_trilogy_db_minimal"
3031
],
3132
"heroku": [
3233
"heroku/ruby-getting-started"

hatchet.lock

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -23,6 +23,8 @@
2323
- fbdaf031823f09d1514ec1d55dcb04ca2f4264ca
2424
- - "./repos/rails_versions/rails61"
2525
- 47828a3e8c79b7869ca0d9a3afa4be065fa46e96
26+
- - "./repos/rails_versions/rails_8_1_trilogy_db_minimal"
27+
- 3a4ac8b53c68c504b980c4403f6b27b5cf57dd4b
2628
- - "./repos/rails_versions/rails_8_ruby_schema"
2729
- a993a3f00c8e09f733bc3b783f7e37148d0af1d4
2830
- - "./repos/rails_versions/rails_8_sql_schema"

lib/language_pack/rails3.rb

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -199,6 +199,9 @@ def database_url
199199
elsif bundler.has_gem?("sqlite3") || bundler.has_gem?("sqlite3-ruby")
200200
"sqlite3"
201201
end
202-
"#{scheme}://user:pass@127.0.0.1/dbname"
202+
203+
if scheme
204+
"#{scheme}://user:pass@127.0.0.1/dbname"
205+
end
203206
end
204207
end

spec/hatchet/bugs_spec.rb

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -24,6 +24,14 @@
2424
end
2525
end
2626
end
27+
28+
it "does not generate an incorrect DATABASE_URL if adapter is not known" do
29+
Hatchet::Runner.new("rails_8_1_trilogy_db_minimal").tap do |app|
30+
app.deploy do
31+
# Works
32+
end
33+
end
34+
end
2735
end
2836

2937
it "detect fails when no Gemfile is present" do

0 commit comments

Comments
 (0)