diff --git a/railties/lib/rails/commands/devcontainer/devcontainer_command.rb b/railties/lib/rails/commands/devcontainer/devcontainer_command.rb index 63a0839778..53ac3e4699 100644 --- a/railties/lib/rails/commands/devcontainer/devcontainer_command.rb +++ b/railties/lib/rails/commands/devcontainer/devcontainer_command.rb @@ -22,13 +22,18 @@ def perform(*) def devcontainer_options @devcontainer_options ||= { app_name: Rails.application.railtie_name.chomp("_application"), - database: !!defined?(ActiveRecord) && ActiveRecord::Base.connection_db_config.adapter, + database: !!defined?(ActiveRecord) && database, active_storage: !!defined?(ActiveStorage), redis: !!(defined?(ActionCable) || defined?(ActiveJob)), system_test: File.exist?("test/application_system_test_case.rb"), node: File.exist?(".node-version"), } end + + def database + adapter = ActiveRecord::Base.connection_db_config.adapter + adapter == "mysql2" ? "mysql" : adapter + end end end end diff --git a/railties/test/commands/devcontainer_test.rb b/railties/test/commands/devcontainer_test.rb index f7feeba4e3..88501a26c5 100644 --- a/railties/test/commands/devcontainer_test.rb +++ b/railties/test/commands/devcontainer_test.rb @@ -20,4 +20,28 @@ class Rails::Command::DevcontainerTest < ActiveSupport::TestCase assert_match "system_test: true", output assert_match "node: false", output end + + test "generates devcontainer for using mysql2 app" do + build_app + + Dir.chdir(app_path) do + use_mysql2 + + output = rails "devcontainer" + + assert_match "app_name: app_template", output + assert_match "database: mysql", output + assert_match "active_storage: true", output + assert_match "redis: true", output + assert_match "system_test: true", output + assert_match "node: false", output + + assert_match "ghcr.io/rails/devcontainer/features/mysql-client", read_file(".devcontainer/devcontainer.json") + end + end + + private + def read_file(relative) + File.read(app_path(relative)) + end end