Как в php deployer установить детали хоста из .env вместо ~ / .ssh / config

Я ищу, как настроить хост-пользователя и перейти из env

это не работает - нужна строка, а не функция

host('51.38.98.87')
    ->stage('production')
    ->user( function(){return getenv('PRODUCTION_USER'); )
    ->pass( function(){return getenv('PRODUCTION_PASS'); )
    ->port(22)

в Symfony 4 я использую env и не хочу устанавливать хосты в ~ / .ssh / config

Обновление1:

<?php
namespace Deployer;

use Symfony\Component\Dotenv\Dotenv;

require 'recipe/symfony.php';

require_once 'vendor/autoload.php';

$dotenv = new Dotenv();
$dotenv->load(__DIR__.'/.env');

тогда

деп развернуть производство

получить

dep deploy production


 [Error] Class 'Symfony\Component\Dotenv\Dotenv' not found                                                              


 #0 phar:///usr/local/bin/dep/src/Deployer.php(325): require()                                                          
 #1 [internal function]: Deployer\Deployer::Deployer\{closure}()                                                        
 #2 phar:///usr/local/bin/dep/src/Deployer.php(326): call_user_func(Object(Closure))                                    
 #3 phar:///usr/local/bin/dep/bin/dep(119): Deployer\Deployer::run('6.3.0',

Обновление 2

composer.json имеет symfony / dotenv

 "require-dev": {
        "doctrine/doctrine-fixtures-bundle": "^3.0",
        "symfony/browser-kit": "^4.0",
        "symfony/css-selector": "^4.0",
        "symfony/debug-pack": "*",
        "symfony/dotenv": "^4.0",
        "symfony/maker-bundle": "^1.0",
        "symfony/phpunit-bridge": "^4.0",
        "symfony/profiler-pack": "*",
        "symfony/web-server-bundle": "^4.0"
    },

но все равно

namespace Deployer;

use Symfony\Component\Dotenv\Dotenv;

require 'vendor/autoload.php';

require 'recipe/symfony.php';


$dotenv = new Dotenv();
$dotenv->load(__DIR__.'/.env');

дай мой

Class 'Symfony\Component\Dotenv\Dotenv' not found                                                              


 #0 phar:///usr/local/bin/dep/src/Deployer.php(325): require()                                                          
 #1 [internal function]: Deployer\Deployer::Deployer\{closure}()                                                        
 #2 phar:///usr/local/bin/dep/src/Deployer.php(326): call_user_func(Object(Closure))                                    
 #3 phar:///usr/local/bin/dep/bin/dep(119): Deployer\Deployer::run('6.3.0', '/home/grek/Phps...')                       
 #4 /usr/local/bin/dep(4): require('phar:///usr/loc...')                                                                
 #5 {main}        

ОБНОВЛЕНИЕ 3
Создаю тестовый файл: ./test.php

<?php

use Symfony\Component\Dotenv\Dotenv;

require 'vendor/autoload.php';

(new Dotenv())->load(__DIR__.'/.env');

php test.php работает отлично.

Запуск из того же места Dep deploy: постановка

дай мой

 [Error] Class 'Symfony\Component\Dotenv\Dotenv' not found                                                              


 #0 phar:///usr/local/bin/dep/src/Deployer.php(325): require()     

мой файл deploy.php

<?php
namespace Deployer;

use Symfony\Component\Dotenv\Dotenv;

require 'vendor/autoload.php';

require 'recipe/symfony.php';

(new Dotenv())->load(__DIR__.'/.env');

Deployer установлен глобально

whereis dep
dep: /usr/local/bin/dep

Вы убедились, что рассматриваемый класс существует правильно?

Nico Haase 24.10.2019 16:31
Стоит ли изучать PHP в 2026-2027 годах?
Стоит ли изучать PHP в 2026-2027 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Symfony Station Communiqué - 7 июля 2023 г
Symfony Station Communiqué - 7 июля 2023 г
Это коммюнике первоначально появилось на Symfony Station .
Оживление вашего приложения Laravel: Понимание режима обслуживания
Оживление вашего приложения Laravel: Понимание режима обслуживания
Здравствуйте, разработчики! В сегодняшней статье мы рассмотрим важный аспект управления приложениями, который часто упускается из виду в суете...
Установка и настройка Nginx и PHP на Ubuntu-сервере
Установка и настройка Nginx и PHP на Ubuntu-сервере
В этот раз я сделаю руководство по установке и настройке nginx и php на Ubuntu OS.
Коллекции в Laravel более простым способом
Коллекции в Laravel более простым способом
Привет, читатели, сегодня мы узнаем о коллекциях. В Laravel коллекции - это способ манипулировать массивами и играть с массивами данных. Благодаря...
Как установить PHP на Mac
Как установить PHP на Mac
PHP - это популярный язык программирования, который используется для разработки веб-приложений. Если вы используете Mac и хотите разрабатывать...
2
1
1 445
2

Ответы 2

Вы пытались включить symfony / dotenv в свой файл deploy.php?

require_once 'vendor/autoload.php';

$dotenv = new Dotenv();
$dotenv->load(__DIR__.'/.env');

Сначала вам нужно установить компонент dotenv:

composer require --dev symfony/dotenv

Удалите опцию --dev, если вы используете ее в среде только с производственными зависимостями.

Так я и сделал! Используйте информацию о композиторе, чтобы узнать, установлен ли компонент dotenv.

Nek 20.12.2018 13:51

информация о композиторе: symfony / dotenv v4.2.1 Регистрирует переменные среды из файла .env, существуют, но не работают

Developer 20.12.2018 14:13

Вместо этого мне пришлось запустить это: require __DIR__ . '/bootstrap/autoload.php'; \Dotenv\Dotenv::create(__DIR__)->load();

Ryan 07.11.2019 21:23

Я использую файлы .env для создания файлов настроек, и способ, которым я это обошел, заключался в том, чтобы добавить свойство к хосту, которое указывает файлы .env и шаблонов:

# hosts.yml
hostname:
  ...
  env_file: .env.stage
  settings_template: somewhere/file.template

# file.template
...
'database' => '{{DB_NAME}}',
...

Загрузите учетные данные с помощью функции:

# deploy.php
// Loading of .env files
// add Symfony's dotenv as a requirement: composer global require symfony/dotenv:"^3"
function loadenv() {
    $env_file = get('env_file');
    $environment = file_get_contents($env_file);
    $dotenv = new \Symfony\Component\Dotenv\Dotenv();
    $data = $dotenv->parse($environment);
    return $data;
};

Наконец, создайте задачу, которая вызывает функцию loadenv(), записывает учетные данные в файл и загружает его на сервер:

task('upload:settings', function () {
    if (askConfirmation('Are you sure to generate and upload the settings?')) {
        //Get template
        $template = get('settings_template');
        //Import secrets
        $secrets = loadenv();
        //Prepare replacement variables
        $iterator = new \RecursiveIteratorIterator(
            new \RecursiveArrayIterator($secrets)
        );
        $replacements = [];
        foreach ($iterator as $key => $value) {
            $keys = [];
            for ($i = $iterator->getDepth(); $i > 0; $i --) {
                $keys[] = $iterator->getSubIterator($i - 1)->key();
            }
            $keys[] = $key;
            $replacements['{{' . implode('.', $keys) . '}}'] = $value;
        }
        //Create settings from template
        $settings = file_get_contents($template);
        $settings = strtr($settings, $replacements);
        $tmpFilename = 'settings.tmp';
        file_put_contents($tmpFilename, $settings);
        upload($tmpFilename, '{{release_path}}/somewhere', ['options'=> ['--inplace']]);

    }
});

Другие вопросы по теме