Рейтинг:3

Exclude settings from a contrib module on export

флаг us

I've two environment, dev and staging. I'm using the ReCaptcha module.

In the developpement environment, I have some api keys a other config which until now, are exported thanks to drush cex inside the recaptcha.settings file

site_key: mysite_key
secret_key: mysite_secret
verify_hostname: false
use_globally: false
widget:
  theme: dark
  type: image
  size: ''
  tabindex: 0
  noscript: false
_core:
  default_config_hash: mydefault_hash
langcode: fr

If I update my staging files website, the config from the development is imported with drush cim.

How can I, without another module, prevent this ?

In my settings.local.dev.php, I've added this line and ran drush cex :

$settings['config_exclude_modules'] = ['recaptcha'];

And it gave me this result

enter image description here

The config is completly deleted, but I'd like to keep all the config but not the site_key / secret_key (such as theme etc...)

I wish I could have a config for the development and the staging separetly, but still using drush commands.

флаг cn
Вам не нужно возиться с экспортом здесь, ваш секретный ключ все равно никогда не должен быть в кодовой базе.Вместо этого используйте [переопределение конфигурации](https://www.drupal.org/docs/drupal-apis/configuration-api/configuration-override-system) в settings.php, это намного проще
Рейтинг:4
флаг cn

Вам не нужно исключать ключи API из экспорта; вместо этого вы можете установить их в коде, и тогда не имеет значения, что экспортируется. (... возможно. Некоторые модули не будут работать с таким подходом.)

Вы можете переопределить конфигурацию непосредственно в настройки.php.

Вот пример с модулем Swiftmailer, взятым с одного из моих сайтов.

swiftmailer.transport.yml

транспорт: смтп
smtp_host: smtp.example.com
smtp_порт: 465
smtp_encryption: ssl
smtp_credential_provider: программа быстрой почты
smtp_credentials:
  быстрый почтовик:
    имя пользователя: ''
    пароль: ''
sendmail_path: /usr/sbin/sendmail
sendmail_mode: бс
spool_directory: ''
_основной:
  default_config_hash: RSNbRD3ekSaZoE19f3eHhm93gKOcD2PtmaAVmV3XMes
код языка: ja

Теперь я хочу использовать другой ключ API для разработки и производства. Итак, в настройки.php, задаю конфиг вручную:

  $config['swiftmailer.transport']['smtp_credentials']['swiftmailer']['username'] = 'apikey';
  $config['swiftmailer.transport']['smtp_credentials']['swiftmailer']['пароль'] = 'ABCDEFGHIJKLMNOP'

В моем случае я использую переключатель для обнаружения переменной среды (live, test, dev и т. д.), потому что так делает хост Pantheon, но вы можете сделать то же самое с settings.local.dev.php файлы.

Конфиг в настройки.php никогда не будет экспортироваться; drush проигнорирует это. Тем не менее, Drupal всегда будет отдавать приоритет конфигурации, установленной в коде, а не .yml файлы. В результате, если вам нужно изменить это, вам придется обновить сам код; вы больше не сможете вносить изменения из пользовательского интерфейса.

Также обратите внимание, что такая проверка ключей API в системе управления версиями может быть потенциальной проблемой безопасности.

Модуль переопределения конфигурации добавляет предупреждение на экраны администратора, которое напоминает вам, что вы переопределяете значения в коде.

Если безопасность является проблемой, есть Локр модуль, который был создан специально для обработки вариантов использования манипулирования ключами API, но за это нужно платить.

mt.i.1 avatar
флаг us
Это сложно, потому что мой клиент, вероятно, однажды изменит ключ (мой вопрос более глобальный, чем только один модуль), поэтому в этом случае я не думаю, что делать это с помощью кода - лучший подход. .. Но если я в конечном итоге сделаю по коду, если я хорошо понимаю, я должен добавить этот `$config['recaptcha.settings']['site_key'] = "mycustomky";` внутри *settings.local. dev.php* ?
флаг cn
@ mt.i.1 Да, это выглядит правильно.
mt.i.1 avatar
флаг us
Он хорошо работает на фронте, можно ли «связать» ключ в базе данных, чтобы он отображался на бэкэнде? Эти поля являются обязательными, и я не могу отправить форму, чтобы сохранить другие настройки.
флаг cn
@ mt.i.1 Вы можете использовать значение производственного поля или фиктивное значение поля (неверный ключ API, который проверяет), чтобы сохранить конфигурацию.
hotwebmatter avatar
флаг nr
Если вы не хотите сохранять пароли и ключи API в активной конфигурации (где они будут экспортированы в формате YAML и отображаться в репозитории кода в виде открытого текста) или в файле настроек (также представленном в репозитории кода в виде открытого текста), вы можете сохраните эти значения в файле `secrets.php`, уникальном для каждой среды, который может быть получен с помощью `settings.php` или `settings.local.php`.
mt.i.1 avatar
флаг us
Да, я в конечном итоге сделал что-то подобное!

Ответить или комментировать

Большинство людей не понимают, что склонность к познанию нового открывает путь к обучению и улучшает межличностные связи. В исследованиях Элисон, например, хотя люди могли точно вспомнить, сколько вопросов было задано в их разговорах, они не чувствовали интуитивно связи между вопросами и симпатиями. В четырех исследованиях, в которых участники сами участвовали в разговорах или читали стенограммы чужих разговоров, люди, как правило, не осознавали, что задаваемый вопрос повлияет — или повлиял — на уровень дружбы между собеседниками.