А как на VDS запустить drush, установленый Cоmposer-ом.

Аватар пользователя VasyOK VasyOK 16 марта в 23:30

Продолжаю заниматься любовью с ВДС Евробайта.
Поставил Drush на сайт с помощью Cоmposer.
Как сделать, чтобы Drush работал?

Вбил:
$ alias drush='/var/www/vendor/drush/drush/drush'

Потом:
$ drush

Вроде работает, но после того как я на сервер повторно захожу пишет
Command 'drush' not found

Комментарии

Аватар пользователя marassa marassa 17 марта в 7:07

"Псевдоним будет доступен только в текущем сеансе оболочки. Если вы выйдете из сеанса или откроете новый сеанс из другого терминала, псевдоним будет недоступен.
Чтобы сделать псевдоним постоянным, вам нужно объявить его в файле ~/.bash_profile или ~/.bashrc ."
https://baks.dev/article/terminal/how-to-create-bash-aliases

Аватар пользователя nzytsprim nzytsprim 17 марта в 14:25

VasyOK wrote: alias drush='/var/www/vendor/drush/drush/drush'

У Вас drush неправильный Smile
Правильный composer по-умолчанию ставит в каталог vendor/bin/
Откройте и посмотрите, чем они отличаются.

Аватар пользователя VasyOK VasyOK 17 марта в 19:33

Не понимаю чем они отличаются. Вроде в 2х местах есть. В обоих запустил показало одинаковую версию.

Аватар пользователя bsyomov bsyomov 19 марта в 10:34

В ~.composer/vendor/bin будет симлинк на ../drush/drush/drush так что композеры одинаковы, конечно.
Но делать алиас, разумнее на тот, что в vendor/bin.

Аватар пользователя nzytsprim nzytsprim 19 марта в 17:00

bsyomov wrote: В ~.composer/vendor/bin будет симлинк на...

Первая мысль тоже была про симлинк. Но нет.
Файл vendor/drush/drush/drush

#!/usr/bin/env php
<?php

require __DIR__ . '/drush.php';

Файл vendor/bin/drush

#!/usr/bin/env php
<?php

/**
 * Proxy PHP file generated by Composer
 *
 * This file includes the referenced bin path (../drush/drush/drush)
 * using a stream wrapper to prevent the shebang from being output on PHP<8
 *
 * @generated
 */

namespace Composer;

$GLOBALS['_composer_bin_dir'] = __DIR__;
$GLOBALS['_composer_autoload_path'] = __DIR__ . '/..'.'/autoload.php';

if (PHP_VERSION_ID < 80000) {
    if (!class_exists('Composer\BinProxyWrapper')) {
        /**
         * @internal
         */

        final class BinProxyWrapper
        {
            private $handle;
            private $position;
            private $realpath;

            public function stream_open($path, $mode, $options, &$opened_path)
            {
                // get rid of phpvfscomposer:// prefix for __FILE__ & __DIR__ resolution
                $opened_path = substr($path, 17);
                $this->realpath = realpath($opened_path) ?: $opened_path;
                $opened_path = $this->realpath;
                $this->handle = fopen($this->realpath, $mode);
                $this->position = 0;

                return (bool) $this->handle;
            }

            public function stream_read($count)
            {
                $data = fread($this->handle, $count);

                if ($this->position === 0) {
                    $data = preg_replace('{^#!.*\r?\n}', '', $data);
                }

                $this->position += strlen($data);

                return $data;
            }

            public function stream_cast($castAs)
            {
                return $this->handle;
            }

            public function stream_close()
            {
                fclose($this->handle);
            }

            public function stream_lock($operation)
            {
                return $operation ? flock($this->handle, $operation) : true;
            }

            public function stream_tell()
            {
                return $this->position;
            }

            public function stream_eof()
            {
                return feof($this->handle);
            }

            public function stream_stat()
            {
                return array();
            }

            public function stream_set_option($option, $arg1, $arg2)
            {
                return true;
            }

            public function url_stat($path, $flags)
            {
                $path = substr($path, 17);
                if (file_exists($path)) {
                    return stat($path);
                }

                return false;
            }
        }
    }

    if (function_exists('stream_wrapper_register') && stream_wrapper_register('phpvfscomposer', 'Composer\BinProxyWrapper')) {
        include("phpvfscomposer://" . __DIR__ . '/..'.'/drush/drush/drush');
        exit(0);
    }
}

include __DIR__ . '/..'.'/drush/drush/drush';

Если следовать https://www.drush.org/latest/install/ , то Drush вызывается через vendor/bin/drush.
Внизу там табличка совместимости версий Drupal, PHP и Drush.