From bc6f310db8db6fb39b0eab8e90d164707599bfd1 Mon Sep 17 00:00:00 2001 From: thoran Date: Mon, 15 Feb 2021 17:37:06 +1100 Subject: [PATCH 1/2] feat(database config): use DATABASE_URL in .env for all environments --- src/web_app_skeleton/config/database.cr.ecr | 40 ++++++++++++++++----- 1 file changed, 31 insertions(+), 9 deletions(-) diff --git a/src/web_app_skeleton/config/database.cr.ecr b/src/web_app_skeleton/config/database.cr.ecr index 66f84960..a03d7b67 100644 --- a/src/web_app_skeleton/config/database.cr.ecr +++ b/src/web_app_skeleton/config/database.cr.ecr @@ -1,17 +1,39 @@ -database_name = "<%= crystal_project_name %>_#{Lucky::Env.name}" +def database_url_credentials + Avram::Credentials.parse?(ENV["DATABASE_URL"]?) +end + +def database + "<%= crystal_project_name %>_#{Lucky::Env.name}" +end + +def hostname + database_url_credentials.try(&.hostname) || ENV["DB_HOST"]? || "localhost" +end + +def port + database_url_credentials.try(&.port) || ENV["DB_PORT"]?.try(&.to_i) || 5432 +end + +# Some common usernames are "postgres", "root", or your system username (run 'whoami') +def username + database_url_credentials.try(&.username) || ENV["DB_USERNAME"]? || "postgres" +end + +# Some Postgres installations require no password. Use "" if that is the case. +def password + database_url_credentials.try(&.password) || ENV["DB_PASSWORD"]? || "postgres" +end AppDatabase.configure do |settings| if Lucky::Env.production? settings.credentials = Avram::Credentials.parse(ENV["DATABASE_URL"]) else - settings.credentials = Avram::Credentials.parse?(ENV["DATABASE_URL"]?) || Avram::Credentials.new( - database: database_name, - hostname: ENV["DB_HOST"]? || "localhost", - port: ENV["DB_PORT"]?.try(&.to_i) || 5432, - # Some common usernames are "postgres", "root", or your system username (run 'whoami') - username: ENV["DB_USERNAME"]? || "postgres", - # Some Postgres installations require no password. Use "" if that is the case. - password: ENV["DB_PASSWORD"]? || "postgres" + settings.credentials = Avram::Credentials.new( + database: database, + hostname: hostname, + port: port, + username: username, + password: password ) end end From 801bb62359d06f6f4e12fd8c94cbaf44141a1c84 Mon Sep 17 00:00:00 2001 From: thoran Date: Mon, 22 Feb 2021 13:43:23 +1100 Subject: [PATCH 2/2] feat(database config): one .env per environment and one default .env --- src/web_app_skeleton/.env.development | 2 ++ src/web_app_skeleton/.env.production | 0 src/web_app_skeleton/.env.test | 2 ++ src/web_app_skeleton/config/database.cr.ecr | 20 ++++++++------------ src/web_app_skeleton/spec/spec_helper.cr.ecr | 2 -- src/web_app_skeleton/src/shards.cr.ecr | 2 +- 6 files changed, 13 insertions(+), 15 deletions(-) create mode 100644 src/web_app_skeleton/.env.development create mode 100644 src/web_app_skeleton/.env.production create mode 100644 src/web_app_skeleton/.env.test diff --git a/src/web_app_skeleton/.env.development b/src/web_app_skeleton/.env.development new file mode 100644 index 00000000..6bb7ad44 --- /dev/null +++ b/src/web_app_skeleton/.env.development @@ -0,0 +1,2 @@ +DEV_PORT=5001 +DATABASE_URL=postgres://lucky:developer@localhost:5432/"<%= crystal_project_name %>_development" diff --git a/src/web_app_skeleton/.env.production b/src/web_app_skeleton/.env.production new file mode 100644 index 00000000..e69de29b diff --git a/src/web_app_skeleton/.env.test b/src/web_app_skeleton/.env.test new file mode 100644 index 00000000..68b0e4e4 --- /dev/null +++ b/src/web_app_skeleton/.env.test @@ -0,0 +1,2 @@ +DEV_PORT=5001 +DATABASE_URL=postgres://lucky:developer@localhost:5432/"<%= crystal_project_name %>_test" diff --git a/src/web_app_skeleton/config/database.cr.ecr b/src/web_app_skeleton/config/database.cr.ecr index a03d7b67..01573264 100644 --- a/src/web_app_skeleton/config/database.cr.ecr +++ b/src/web_app_skeleton/config/database.cr.ecr @@ -3,7 +3,7 @@ def database_url_credentials end def database - "<%= crystal_project_name %>_#{Lucky::Env.name}" + database_url_credentials.try(&.database) || ENV["DB_NAME"]? || <%= crystal_project_name %> end def hostname @@ -25,17 +25,13 @@ def password end AppDatabase.configure do |settings| - if Lucky::Env.production? - settings.credentials = Avram::Credentials.parse(ENV["DATABASE_URL"]) - else - settings.credentials = Avram::Credentials.new( - database: database, - hostname: hostname, - port: port, - username: username, - password: password - ) - end + settings.credentials = Avram::Credentials.new( + database: database, + hostname: hostname, + port: port, + username: username, + password: password + ) end Avram.configure do |settings| diff --git a/src/web_app_skeleton/spec/spec_helper.cr.ecr b/src/web_app_skeleton/spec/spec_helper.cr.ecr index c60db513..f358efeb 100644 --- a/src/web_app_skeleton/spec/spec_helper.cr.ecr +++ b/src/web_app_skeleton/spec/spec_helper.cr.ecr @@ -1,5 +1,3 @@ -ENV["LUCKY_ENV"] = "test" -ENV["DEV_PORT"] = "5001" require "spec" <%- if browser? -%> require "lucky_flow" diff --git a/src/web_app_skeleton/src/shards.cr.ecr b/src/web_app_skeleton/src/shards.cr.ecr index 1bdb9123..56c35b56 100644 --- a/src/web_app_skeleton/src/shards.cr.ecr +++ b/src/web_app_skeleton/src/shards.cr.ecr @@ -1,6 +1,6 @@ # Load .env file before any other config or app code require "dotenv" -Dotenv.load? +Dotenv.load?(".env") || Dotenv.load?(".env.#{ENV["LUCKY_ENV"]}") # Require your shards here require "avram"