You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Heroku环境中Drush无法识别DATABASE_URL环境变量求助

解决方案

方案1:执行Drush命令时直接注入环境变量

每次通过heroku run执行Drush时,将DATABASE_URL直接传入进程环境:

heroku run "DATABASE_URL=$(heroku config:get DATABASE_URL -a my-app) drush <你的Drush命令>" -a my-app

示例(清除缓存):

heroku run "DATABASE_URL=$(heroku config:get DATABASE_URL -a my-app) drush cr" -a my-app

方案2:配置Drush别名文件

在项目的drush/sites目录(不存在则创建)下创建self.site.yml,直接写入数据库配置信息:

prod:
  root: /app/web
  uri: https://<你的应用域名>.herokuapp.com
  database:
    default:
      default:
        database: '<从DATABASE_URL提取的数据库名>'
        username: '<数据库用户名>'
        password: '<数据库密码>'
        host: '<数据库主机地址>'
        port: '<端口号>'
        driver: mysql
        isolation_level: 'READ COMMITTED'

后续执行Drush时指定别名:

heroku run drush @prod <你的命令>

注:数据库信息可从heroku config:get DATABASE_URL -a my-app的结果中解析,比如mysql://user:pass@host:port/dbname对应各字段即可。

方案3:编写Drush启动脚本

在项目根目录创建drush-launch.sh脚本:

#!/bin/bash
# 从Heroku配置获取DATABASE_URL并注入环境
export DATABASE_URL=$(heroku config:get DATABASE_URL -a my-app)
# 执行传入的Drush命令
exec drush "$@"

给脚本添加执行权限并部署:

git add drush-launch.sh
git update-index --chmod=+x drush-launch.sh
git commit -m "Add Drush launch script for Heroku"
git push heroku main

之后使用脚本执行Drush命令:

heroku run ./drush-launch.sh <你的命令>

方案4:修改settings.php兼容Drush环境

在settings.php中添加 fallback 逻辑,当环境变量获取失败时,尝试读取Drush命令行参数:

$db_url = getenv('DATABASE_URL');
// 若环境变量不存在,尝试读取Drush的--db-url参数
if (!$db_url && function_exists('drush_get_option')) {
  $db_url = drush_get_option('db-url');
}

if ($db_url) {
  $db_cred = parse_url($db_url);
  $databases['default']['default'] = array (
    'database' => ltrim($db_cred['path'], '/'),
    'username' => $db_cred['user'],
    'password' => $db_cred['pass'],
    'prefix' => '',
    'host' => $db_cred['host'],
    'port' => $db_cred['port'],
    'isolation_level' => 'READ COMMITTED',
    'namespace' => 'Drupal\mysql\Driver\Database\mysql',
    'driver' => $db_cred['scheme'],
    'autoload' => 'core/modules/mysql/src/Driver/Database/mysql/',
  );
}

执行Drush时手动传递参数:

heroku run drush <命令> --db-url=$(heroku config:get DATABASE_URL -a my-app)

内容的提问来源于stack exchange,提问作者florian_drupal

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.06 13:42:50