fix: prioritize MYSQL* env vars over DATABASE_URL in _build_database_uri

This commit is contained in:
railway-app[bot] 2026-04-29 06:39:36 +00:00 committed by GitHub
parent 2e51686c13
commit 96d086b4ed
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194
1 changed files with 26 additions and 6 deletions

View File

@ -21,18 +21,38 @@ DATABASE_URL = os.environ.get('DATABASE_URL')
def _build_database_uri(): def _build_database_uri():
"""Build a SQLAlchemy database URI from Railway or local environment variables.""" """Build a SQLAlchemy database URI from Railway or local environment variables.
Priority:
1. Individual Railway reference variables (MYSQLHOST, MYSQLPORT, MYSQLUSER,
MYSQLPASSWORD, MYSQLDATABASE) most reliable when set via Railway reference vars.
2. DATABASE_URL used as a fallback if the individual variables are absent.
"""
mysql_host = os.environ.get('MYSQLHOST')
mysql_port = os.environ.get('MYSQLPORT')
mysql_user = os.environ.get('MYSQLUSER')
mysql_password = os.environ.get('MYSQLPASSWORD') # may be empty string — that is valid
mysql_database = os.environ.get('MYSQLDATABASE')
if mysql_host and mysql_user and mysql_database:
db_port = mysql_port or '3306'
db_password = mysql_password if mysql_password is not None else ''
if db_password:
return f"mysql+pymysql://{mysql_user}:{db_password}@{mysql_host}:{db_port}/{mysql_database}"
return f"mysql+pymysql://{mysql_user}@{mysql_host}:{db_port}/{mysql_database}"
if DATABASE_URL: if DATABASE_URL:
url = make_url(DATABASE_URL) url = make_url(DATABASE_URL)
if url.drivername == 'mysql': if url.drivername == 'mysql':
url = url.set(drivername='mysql+pymysql') url = url.set(drivername='mysql+pymysql')
return str(url) return str(url)
db_host = os.environ.get('DB_HOST') or os.environ.get('MYSQLHOST', 'localhost') # Last-resort local defaults
db_port = os.environ.get('DB_PORT') or os.environ.get('MYSQLPORT', '3306') db_host = os.environ.get('DB_HOST', 'localhost')
db_user = os.environ.get('DB_USER') or os.environ.get('MYSQLUSER', 'root') db_port = os.environ.get('DB_PORT', '3306')
db_password = os.environ.get('DB_PASSWORD') or os.environ.get('MYSQLPASSWORD', '') db_user = os.environ.get('DB_USER', 'root')
db_name = os.environ.get('DB_NAME') or os.environ.get('MYSQLDATABASE', 'deteksi_pmk') db_password = os.environ.get('DB_PASSWORD', '')
db_name = os.environ.get('DB_NAME', 'deteksi_pmk')
if db_password: if db_password:
return f"mysql+pymysql://{db_user}:{db_password}@{db_host}:{db_port}/{db_name}" return f"mysql+pymysql://{db_user}:{db_password}@{db_host}:{db_port}/{db_name}"