Статьи

Использование Composer для управления зависимостями в приложениях Heroku PHP

Heroku — очень хороший поставщик Platform-as-a-Service , который позволяет вам сосредоточиться на написании приложений, а не на управлении серверами. Если код вашего приложения уже управляется в Git, в большинстве случаев вам нужно всего лишь создать настройку приложения Heroku, а затем git push, чтобы развернуть его в Heroku. Масштабировать ваше приложение легко, и в их магазине приложений есть много полезных дополнений .

Хотя Heroku получил свое начало от размещения приложений Ruby on Rails, в настоящее время он поддерживает множество различных сред в стеке Cedar. Многие используют Node.js, но они также поддерживают PHP .

Управление зависимостями легко для приложений Node.js, поскольку Heroku распознает ваши файлы package.json и автоматически устанавливает библиотеки, необходимые через NPM .

До сих пор разработчики PHP не имели такого удобства, но так как Composer становится менеджером пакетов PHP по умолчанию , я теперь добавил его поддержку . До принятия запроса на получение уже можно использовать обработку зависимостей Composer, указав мой пользовательский сборочный пакет PHP при создании приложений Heroku.

Я написал простой пример приложения, чтобы показать, как это работает.

Сначала вам нужно создать папку для вашего приложения и сделать ее Git-репозиторием:

$ mkdir myapp
$ cd myapp
$ git init

Затем создайте приложение Heroku с помощью пользовательского пакета сборки (когда запрос на получение принят, вы можете пропустить определение пакета сборки):

$ heroku create -s cedar --buildpack https://github.com/bergie/heroku-buildpack-php.git my-cool-app

Затем пришло время написать файл composer.json . В этом случае мы будем зависеть только от библиотеки urlize :

{
    "require": {
        "php": ">=5.2.0",
        "midgard/midgardmvc-helper-urlize": "*"
    }
}

Чтобы Heroku распознал приложение как PHP, вам также необходимо иметь index.php. В этом случае с помощью следующего кода:

<?php
// URLizer service
require 'vendor/midgard/midgardmvc-helper-urlize/interface.php';
if (isset($_GET['urlize'])) {
    $data = array();
    $data['from'] = $_GET['urlize'];
    $data['to'] = midgardmvc_helper_urlize::string($_GET['urlize']);
    header('Content-type: application/json; charset=utf-8');
    die(json_encode($data));
}
header('Content-Type: text/html; charset=utf-8');
?>
<h1>Urlizer service</h1>
<form method="GET">
    <label>
        String to URLize
        <input name="urlize" type="text" />
    </label>
    <input type="submit" value="URLize" />
</form>

Теперь добавьте и передайте эти файлы, а затем разверните их в Heroku:

$ git push heroku master

Вы должны увидеть, что Heroku замечает зависимости Composer и устанавливает их:

-----> Heroku receiving push
-----> Fetching custom buildpack... done
-----> PHP app detected
-----> Bundling Apache version 2.2.22
-----> Bundling PHP version 5.3.10
-----> Installing Composer dependencies
Installing dependencies
  - Package phptal/phptal (dev-master)
    Cloning e146361f25b8672d364695b757eddf1c169e05d2

  - Package midgard/midgardmvc-core (dev-master)
    Cloning 2b00d38cb2fea42c8f9791c5ecc7270dc81182e8

  - Package midgard/midgardmvc-helper-urlize (dev-master)
    Cloning 92d0c8c638c389b7be1887ca67cd334f51932912

midgard/midgardmvc-core suggests installing ext-midgard2 (>=10.05.5)
Writing lock file
Generating autoload files
-----> Discovering process types
       Procfile declares types -> (none)
       Default types for PHP   -> web
-----> Compiled slug size is 13.2MB
-----> Launching... done, v13

И это все! Вы можете увидеть пример этого приложения на http://urlizer-service.herokuapp.com/ .