Skip to content

Commit fd0d2de

Browse files
committed
Correctly generate Devcontainer setting for applications that using mysql2 gem
Currently, `devcontainer` command sets an adapter name, but `DevcontainerGenerator` requires a database name. https://github.com/rails/rails/blob/16d8b82d5e2aca4780c5d10b1fe9a90b33a0e84e/railties/lib/rails/generators/rails/devcontainer/devcontainer_generator.rb#L11 https://github.com/rails/rails/blob/16d8b82d5e2aca4780c5d10b1fe9a90b33a0e84e/railties/lib/rails/generators/database.rb#L6 So the `devcontainer` command doesn't generate the setting for MySQL. This fixes to generate the correct setting.
1 parent 16d8b82 commit fd0d2de

File tree

2 files changed

+30
-1
lines changed

2 files changed

+30
-1
lines changed

railties/lib/rails/commands/devcontainer/devcontainer_command.rb

Lines changed: 6 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -22,13 +22,18 @@ def perform(*)
2222
def devcontainer_options
2323
@devcontainer_options ||= {
2424
app_name: Rails.application.railtie_name.chomp("_application"),
25-
database: !!defined?(ActiveRecord) && ActiveRecord::Base.connection_db_config.adapter,
25+
database: !!defined?(ActiveRecord) && database,
2626
active_storage: !!defined?(ActiveStorage),
2727
redis: !!(defined?(ActionCable) || defined?(ActiveJob)),
2828
system_test: File.exist?("test/application_system_test_case.rb"),
2929
node: File.exist?(".node-version"),
3030
}
3131
end
32+
33+
def database
34+
adapter = ActiveRecord::Base.connection_db_config.adapter
35+
adapter == "mysql2" ? "mysql" : adapter
36+
end
3237
end
3338
end
3439
end

railties/test/commands/devcontainer_test.rb

Lines changed: 24 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -20,4 +20,28 @@ class Rails::Command::DevcontainerTest < ActiveSupport::TestCase
2020
assert_match "system_test: true", output
2121
assert_match "node: false", output
2222
end
23+
24+
test "generates devcontainer for using mysql2 app" do
25+
build_app
26+
27+
Dir.chdir(app_path) do
28+
use_mysql2
29+
30+
output = rails "devcontainer"
31+
32+
assert_match "app_name: app_template", output
33+
assert_match "database: mysql", output
34+
assert_match "active_storage: true", output
35+
assert_match "redis: true", output
36+
assert_match "system_test: true", output
37+
assert_match "node: false", output
38+
39+
assert_match "ghcr.io/rails/devcontainer/features/mysql-client", read_file(".devcontainer/devcontainer.json")
40+
end
41+
end
42+
43+
private
44+
def read_file(relative)
45+
File.read(app_path(relative))
46+
end
2347
end

0 commit comments

Comments
 (0)