leemason/larastaller

Larastaller包通过web或Artisan提供流畅的接口,用于安装/升级您的项目。

dev-master 2015-12-09 13:38 UTC

This package is not auto-updated.

Last update: 2024-09-14 19:36:35 UTC


README

Packagist License Latest Stable Version Total Downloads Build Status

Larastaller包通过web或Artisan提供流畅的接口,用于安装/升级您的项目。

安装

使用composer安装此包

composer require leemason/larastaller

更新composer后,将ServiceProvider添加到config/app.php中的providers数组中

Laravel 5.1

LeeMason\Larastaller\LarastallerServiceProvider::class,

使用发布命令将packages配置复制到您的config文件夹

php artisan vendor:publish --force

一旦完成,您现在应该有一个位于config/larastaller.php的配置文件。

在此文件中,您将看到2个数组项,requirementsversions

这两个都是数组,requirements将包含一些基本的Laravel必需项以供您开始(您可能不需要更多)。

但对于versions,您需要添加自己的。每个版本可以具有以下内容

'1.0.0' => [
    'changes' => [
        'this is a change',
        'this is another'
    ],
    'requirements' => [
        //.. the same as the main requirements
    ],
    'tasks' => [
        \LeeMason\Larastaller\Tasks\AppKeyTask::class,
        \LeeMason\Larastaller\Tasks\MigrateTask::class,
        //.. any more tasks you need to complete for this version
    ],
]

如您所见,数组键是版本字符串。这必须以与php version_compare函数兼容的方式格式化。

兼容性

Larastaller包是在Laravel 5.1上开发的,我认为它应该也能与5.0甚至4.x兼容,但它仅针对5.1进行了测试。

简介

@todo

用法

http

@todo

artisan

larastaller包包含多个安装命令,如下所示

php artisan installer:install

这将

  • 运行所有版本的依赖项,测试它们并报告任何错误。
  • 通过控制台问题、密码、选择和true/false字段请求每个任务请求的所有数据**
  • 解析每个任务类并执行任务的handle()函数
  • 如果任务抛出异常,则安装将停止
  • 如果所有任务都成功完成,则将安装详细信息保存到storage_path('installation.json');文件中
  • 报告安装成功并退出

** 如果您提供了--path选项,则不会发生这种情况,该选项可以将指向键>值对json编码文件的路径指向输入值。这在部署过程中特别有用,其中使用--no-interaction

php artisan installer:changes $version

```$version```` 可能的值 ["latest", "last-x" eg (last-5), "version" string eg (1.1.1), "all"]

这将获取请求的版本,并将添加到版本数组中的更改显示为列表。

配置

包中包含一个config/larastaller.php文件,其中从其中加载基本配置,并具有空的versions数组。

这(在执行上述安装步骤之后)会复制到您的应用程序配置文件夹中,并应包含您所有的自定义需求和版本。

数组中的第一个键是安装的需求列表(独立于任何版本)。

包中包含一些需求类,它们提供必须满足的任何Laravel应用程序的需求,但如果您有其他特定于您的应用程序的需求,您应该将它们附加在这里。

'requirements' => [
    \LeeMason\Larastaller\Requirements\PhpVersionRequirement::class,
    \LeeMason\Larastaller\Requirements\PdoRequirement::class,
    \LeeMason\Larastaller\Requirements\MbStringRequirement::class,
    \LeeMason\Larastaller\Requirements\OpenSSLRequirement::class,
    \LeeMason\Larastaller\Requirements\TokenizerRequirement::class,
    \LeeMason\Larastaller\Requirements\FolderPermissionsRequirement::class,
    \LeeMason\Larastaller\Requirements\EnvFileRequirement::class,
],

第二项是versions数组,它包含应用程序的版本数组。

每个版本应该作为数组的索引添加,版本详细信息作为键的值。

'versions' => [
    '1.0.0' => [
        'changes' => [
            'this is a change'
        ],
        'requirements' => [

        ],
        'tasks' => [
            \LeeMason\Larastaller\Tasks\AppKeyTask::class,
            \LeeMason\Larastaller\Tasks\MigrateTask::class,
        ],
    ],
    '1.0.1' => [
        //..
    ],
],

每个版本应该包含一个更改数组、一个需求数组(如果服务器需求按版本更改,则很有用)和一个任务数组。

定义类

LeeMason\Larastaller\Definition 类非常简单,是一个数据存储对象,允许更流畅地访问配置,并为每个版本创建 LeeMason\Larastaller\Version 实例。

它有一个公共的 API,但仅设计用于通过 Larastaller 包进行内部使用。

需求类

需求类用于测试环境是否适合安装应用程序。

它们必须实现 LeeMason\Larastaller\RequirementInterface 接口,并且理想情况下扩展抽象的 LeeMason\Larastaller\Requirement 类。

每个需求类都应该包含公共属性 $description$success$error,这些属性包含描述性字符串来解释需求并提供用户友好的消息。

需求类可以可选地包含一个 __construct() 方法,通过 ServiceContainer 注入任何依赖,这些依赖将自动解决。

需求类最后且最重要的方法是一个 必须提供test() 方法,该方法应返回一个布尔值 true/false,表示需求是否已满足。

大多数需求只是测试需求的是否存在,但 EnvFileRequirement 是一个特殊情况,因为它会在测试之前自动将 .env.example 复制到 .env,如果不存在 .env 文件。

选择这样做而不是将其作为任务,主要是因为 Laravel 应用程序的生命周期。

任务类

任务类用于执行安装应用程序所需的任务。

它们必须实现 LeeMason\Larastaller\TaskInterface 接口,并且理想情况下扩展抽象的 LeeMason\Larastaller\Task 类。

每个任务类都应该包含公共属性 $title,包含描述性字符串来解释任务的函数。

任务类可以可选地包含一个 __construct() 方法,通过 ServiceContainer 注入任何依赖,这些依赖将自动解决。

为了实际执行某些操作,任务类应该包含一个 handle() 方法。

该方法可以执行任何事情,从运行 artisan 命令到修改数据库表。

如果在执行过程中任务应该提供任何用户反馈消息,可以通过使用其 $this->output 属性来实现,该属性始终是 Symfony\Component\Console\Output\OutputInterface 的实例。

这允许任务通过使用 $this->output->writeLn('...'); 方法添加输出。

包中包含一些基本任务以帮助您开始。

LeeMason\Larastaller\Tasks\AppKeyTask

此任务非常简单,执行 php artisan key:generate 命令,并返回其输出。

我们建议此任务作为您包含的第一个版本的第一个任务注册。

LeeMason\Larastaller\Tasks\OptimizeTask

此任务非常简单,执行 php artisan clear-compiled && php artisan optimize --force 命令,并返回其输出。

我们建议此任务作为您包含的每个版本的最后一个任务注册,因为每次有人安装或更新时,都可以重新生成编译的类文件。

LeeMason\Larastaller\Tasks\MigrateTask

此任务本身将简单地执行与调用 php artisan migrate 相同的功能,因此它是一个有用的任务,可以添加到添加迁移到您的应用程序的任何版本中。

然而,它还特别考虑了可扩展性。

例如,如果您需要迁移包或为迁移命令提供选项,您可以扩展类并向 $parameters 数组添加您的参数。

use LeeMason\Larastaller\Tasks\MigrateTask;

class MigratePackageTask extends MigrateTask{

    protected $parameters = [
        '--path' => 'vendor/name/package/migrations'
    ];

}

这将执行: php artisan migrate --path=vendor/name/package/migrations

安装类

LeeMason\Larastaller\Installation 类负责获取和更新应用程序的 storage_path('installation.json') 文件。

它扩展了Illuminate\Support\Collection类,所有从storage_path('installation.json')文件中读取的项目都存储为键 > 值项。

该类可以提供和保存有关安装的数据,并由LeeMason\Larastaller\Installer类使用,以检查应用程序是否已安装以及是否是最新的。

它在服务容器中注册,因此可以被注入,并提供了以下公共方法:在Collection类方法之上:$installation->isInstalled()$installation->isUpdated()

如果您需要持久化更改或添加到installation.json文件,请始终确保调用$installation->save()方法。

安装器类

LeeMason\Larastaller\Installer类负责将已安装版本与声明的版本匹配,并且通常格式化任务、需求等的配置,以通过http和基于命令的安装方法使用。

它不提供可用于其任务之外的外部公共API。

事件

该包为您提供了许多事件,可以将其挂钩以提供附加功能

LeeMason\Larastaller\Events\AfterInstallEvent(Installer $installer, OutputInterface $output)

上述事件在安装过程之前触发,并传递安装器实例$event->installer和OutputInterface$event->output,允许您向安装器发送消息。

LeeMason\Larastaller\Events\BeforeInstallEvent(Installer $installer, OutputInterface $output)

上述事件在安装过程完成后触发,并传递安装器实例$event->installer和OutputInterface$event->output,允许您向安装器发送消息。

常见问题解答

为什么不直接使用版本控制?

版本控制很棒,我们已经为该包设计了配置,以最佳方式使用版本控制的功能。

但是,例如git/svn等服务不能

  • 在更新时清除缓存
  • 在版本之间修改数据库数据
  • 提醒需要新的环境变量

当然,每一项都可以手动完成,甚至可以通过多个artisan命令完成,但用户需要知道这些更改是必要的。

使用larastaller配置保存在版本控制中,任何需要安装它的人都可以简单地运行installer:install命令,而不需要前面的任务列表。

这会取代composer的需求吗?

不会,我们也不想取代。

这意味着您可以通过一个简单的步骤分发您的应用程序。

简单地将"php artisan installer:install"添加到您的composer.json文件中的"post-install-command"数组。

然后,在composer install之后将发生安装过程。

**如果您更愿意使用Web API,只需与vendor目录一起分发您的应用程序,并指导他们到安装URL。

注意

它仍在早期开发阶段,尚未包含的功能有

Web API用于安装/更新现有安装 事件用于安装/更新

未来

  • 添加Web API/路由
  • 添加installer:update命令
  • 微小的功能改进