Drush 无法识别 Heroku 的 env 变量

Drush does not recognize an env variable with Heroku

提问人:florian_drupal 提问时间:11/15/2023 最后编辑:Chrisflorian_drupal 更新时间:11/16/2023 访问量:36

问:

在PHP / Drupal项目中,我在Heroku实例中使用Drush时遇到了问题。Drush 无法识别文件中的环境变量。DATABASE_URLsettings.php

但是,当我使用命令时,它是可见的。与 相同。heroku config -a my-app -sDATABASE_URLphpinfo()

我尝试使用:Procfile

web: export DATABASE_URL=$DATABASE_URL && heroku-php-apache2 web/

但这也行不通。

让 Drush 识别变量的唯一方法是在我在实例上时执行,但它不是持久的:export DATABASE_URL="mysql://..."

heroku ps:exec -a my-app
export DATABASE_URL="mysql://..."
drush status

有什么建议吗?

settings.php:

$db_cred = parse_url(getenv('DATABASE_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/',
);
php heroku drush

评论


答:

0赞 Chris 11/16/2023 #1

这是设计使然

Heroku Exec 创建的 SSH 会话没有将配置变量设置为环境变量(即,在会话中不会列出由 设置的配置变量)。envheroku config:set

我建议你改用heroku run进行连接:

heroku run bash -a my-app
drush status

和之间的主要区别在于前者连接到正在运行的测功机,而后者则旋转一次性测功机heroku ps:execheroku run

您还应该将该更改回滚到 .重新导出这样的环境变量是没有意义的,以后可能会造成混淆。Procfile

最后,请注意,的值可以随时更改。即使能够以持久方式导出其当前值,该连接字符串也可能在明天不起作用。最好每次都读取变量。DATABASE_URL


旁注:看起来 drush status 不是一个有效的命令。我不是一个Drupal的人,所以除了指出这一点之外,我无能为力。也许您正在寻找 、 或其他名称相似的命令?core:statusconfig:status

评论

1赞 florian_drupal 11/17/2023
谢谢,这是作品! 是 的别名drush statusdrush core-status