Skip to content

Commit 35efaca

Browse files
authored
Merge pull request rails#51588 from duduribeiro/add-devcontainer-forward-ports
Change devcontainer.json to forward used ports for the project
2 parents 76bb36c + 6a0f59a commit 35efaca

File tree

3 files changed

+30
-4
lines changed

3 files changed

+30
-4
lines changed

railties/lib/rails/generators/devcontainer.rb

Lines changed: 17 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -64,10 +64,27 @@ def devcontainer_mounts
6464
@devcontainer_mounts
6565
end
6666

67+
def devcontainer_forward_ports
68+
return @devcontainer_forward_ports if @devcontainer_forward_ports
69+
70+
@devcontainer_forward_ports = [3000]
71+
@devcontainer_forward_ports << db_port_for_devcontainer if db_port_for_devcontainer
72+
@devcontainer_forward_ports << 6379 if devcontainer_needs_redis?
73+
74+
@devcontainer_forward_ports
75+
end
76+
6777
def devcontainer_needs_redis?
6878
!(options.skip_action_cable? && options.skip_active_job?)
6979
end
7080

81+
def db_port_for_devcontainer(database = options[:database])
82+
case database
83+
when "mysql", "trilogy" then 3306
84+
when "postgresql" then 5432
85+
end
86+
end
87+
7188
def db_name_for_devcontainer(database = options[:database])
7289
case database
7390
when "mysql" then "mysql"

railties/lib/rails/generators/rails/app/templates/.devcontainer/devcontainer.json.tt

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -18,7 +18,7 @@
1818
<%- end -%>
1919

2020
// Use 'forwardPorts' to make a list of ports inside the container available locally.
21-
// "forwardPorts": [],
21+
"forwardPorts": <%= devcontainer_forward_ports.as_json %>,
2222

2323
// Configure tool-specific properties.
2424
// "customizations": {},

railties/test/generators/app_generator_test.rb

Lines changed: 12 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1248,6 +1248,8 @@ def test_devcontainer
12481248
assert_equal "selenium", content["containerEnv"]["SELENIUM_HOST"]
12491249
assert_equal({}, content["features"]["ghcr.io/rails/devcontainer/features/activestorage"])
12501250
assert_equal({}, content["features"]["ghcr.io/devcontainers/features/github-cli:1"])
1251+
assert_includes(content["forwardPorts"], 3000)
1252+
assert_includes(content["forwardPorts"], 6379)
12511253
end
12521254
assert_file(".devcontainer/Dockerfile") do |content|
12531255
assert_match(/ARG RUBY_VERSION=#{RUBY_VERSION}/, content)
@@ -1295,9 +1297,13 @@ def test_devcontainer_no_redis_skipping_action_cable_and_active_job
12951297
assert_nil compose_config["services"]["redis"]
12961298
assert_nil compose_config["volumes"]
12971299
end
1300+
1301+
assert_devcontainer_json_file do |content|
1302+
assert_not_includes content["forwardPorts"], 6379
1303+
end
12981304
end
12991305

1300-
def test_devonctainer_postgresql
1306+
def test_devcontainer_postgresql
13011307
run_generator [ destination_root, "-d", "postgresql" ]
13021308

13031309
assert_compose_file do |compose_config|
@@ -1320,13 +1326,14 @@ def test_devonctainer_postgresql
13201326
assert_devcontainer_json_file do |content|
13211327
assert_equal "postgres", content["containerEnv"]["DB_HOST"]
13221328
assert_equal({}, content["features"]["ghcr.io/rails/devcontainer/features/postgres-client"])
1329+
assert_includes(content["forwardPorts"], 5432)
13231330
end
13241331
assert_file("config/database.yml") do |content|
13251332
assert_match(/host: <%= ENV\["DB_HOST"\] %>/, content)
13261333
end
13271334
end
13281335

1329-
def test_devonctainer_mysql
1336+
def test_devcontainer_mysql
13301337
run_generator [ destination_root, "-d", "mysql" ]
13311338

13321339
assert_compose_file do |compose_config|
@@ -1349,13 +1356,14 @@ def test_devonctainer_mysql
13491356
assert_devcontainer_json_file do |content|
13501357
assert_equal "mysql", content["containerEnv"]["DB_HOST"]
13511358
assert_equal({}, content["features"]["ghcr.io/rails/devcontainer/features/mysql-client"])
1359+
assert_includes(content["forwardPorts"], 3306)
13521360
end
13531361
assert_file("config/database.yml") do |content|
13541362
assert_match(/host: <%= ENV.fetch\("DB_HOST"\) \{ "localhost" } %>/, content)
13551363
end
13561364
end
13571365

1358-
def test_devonctainer_mariadb
1366+
def test_devcontainer_mariadb
13591367
run_generator [ destination_root, "-d", "trilogy" ]
13601368

13611369
assert_compose_file do |compose_config|
@@ -1375,6 +1383,7 @@ def test_devonctainer_mariadb
13751383
end
13761384
assert_devcontainer_json_file do |content|
13771385
assert_equal "mariadb", content["containerEnv"]["DB_HOST"]
1386+
assert_includes(content["forwardPorts"], 3306)
13781387
end
13791388
assert_file("config/database.yml") do |content|
13801389
assert_match(/host: <%= ENV.fetch\("DB_HOST"\) \{ "localhost" } %>/, content)

0 commit comments

Comments
 (0)