В этом уроке мы узнаем, как установить пользовательские расширения на Heroku. В частности, мы будем устанавливать Phalcon .
Зарегистрируйтесь и настройте
Чтобы использовать Heroku, вы должны зарегистрировать учетную запись Heroku. Heroku обычно работает с интерфейсом командной строки. Чтобы использовать этот интерфейс, вам необходимо установить пакет инструментов Heroku для вашей операционной системы. Если вы используете Linux, откройте терминал и введите следующую команду.
wget -qO- https://toolbelt.heroku.com/install.sh | sh
После установки пояса для инструментов у вас будет доступ к команде heroku из командной оболочки. Авторизуйтесь, используя адрес электронной почты и пароль, которые вы использовали при создании учетной записи Heroku:
 heroku login
Enter your Heroku credentials.
Email: fcopensuse@gmail.com
Password:
Could not find an existing public key.
Would you like to generate one? [Yn]
Generating new SSH public key.
Uploading ssh public key /home/duythien/.ssh/id_rsa.pub
Нажмите enter при появлении запроса, чтобы загрузить существующий ключ ssh или создать новый, который будет использоваться для последующего ввода кода.
Phalcon является сторонним расширением и, следовательно, не входит в состав PHP. Phalcon требует следующих компонентов:
 mbstring
mcrypt
openssl
PDO
PDO/Mysql
PDO/Postgresql
PDO/Sqlite
PDO/Oracle
Основными из них являются mbstring и mcrypt — mbstring используется механизмом шаблонов (Volt), а также некоторыми валидаторами, escape-фильтром и фильтром, а mcrypt используется в компоненте безопасности (создание безопасных хэшей и т. д.)
Чтобы установить вышеупомянутые элементы, мы будем использовать инструмент PHP buildpack. Давайте объясним, что это значит.
Согласно официальной документации Heroku, buildpack-пакеты обеспечивают магию и гибкость, которые делают запуск ваших приложений на Heroku таким простым. Когда вы нажимаете свой код, buildpack — это компонент, который управляет настройкой вашей среды, чтобы ваше приложение могло работать. Пакет buildpack может устанавливать зависимости, настраивать программное обеспечение, манипулировать ресурсами и делать все остальное, необходимое для запуска вашего приложения. У Heroku не всегда были пакеты сборки, это новый компонент, поставляемый со стеком Cedar.
Вы можете получить больше информации об этих трех шагах и больше через документацию buildpack.
Чтобы начать, мы разветвляем этот код на github . Нажмите кнопку «Вилка» в хранилище. Чтобы иметь возможность работать над проектом, вам нужно будет клонировать его на свой локальный компьютер.
Запустите следующий код:
 git clone https://github.com/duythien/heroku-buildpack-php.git buildpack-php
cd buildpack-php
  Создайте файл phalcon.sh$HOME/buildpack-php/bin 
 #!/bin/bash
# Build Path: /app/.heroku/php/
dep_url=git://github.com/phalcon/cphalcon.git
phalcon_dir=cphalcon
echo "-----> Building Phalcon..."
### Phalcon
echo "[LOG] Downloading PhalconPHP"
git clone $dep_url -q
if [ ! -d "$phalcon_dir" ]; then
  echo "[ERROR] Failed to find phalconphp directory $phalcon_dir"
  exit
fi
cd $phalcon_dir/build
# /app/php/bin/phpize
# ./configure --enable-phalcon --with-php-config=$PHP_ROOT/bin/php-config
# make
# make install
BUILD_DIR=$1
ln -s $BUILD_DIR/.heroku /app/.heroku
export PATH=/app/.heroku/php/bin:$PATH
bash ./install
cd
echo "important extension phalcon into php.ini"
echo "extension=phalcon.so" >> /app/.heroku/php/etc/php/php.ini
Этот файл установит Phalcon, но Heroku должен быть проинструктирован, чтобы выполнить его. Для этого вам нужно отредактировать файл bin / compile и добавить где-то следующую строку:
 [...]
source $BP_DIR/bin/phalcon
[...]
  Кроме того, вам нужно добавить текстовое extension=phalcon.soconf / php / php.ini »: 
 [....]
extension=phalcon.so
; Local Variables:
; tab-width: 4
; End:
Теперь мы можем загрузить наш новый buildpack-пакет:
 git add -A
git commit -m "edit php.ini and create phalcon file"
git push origin master
Создать новое приложение на Heroku
Создайте каталог для своего приложения и измените на него:
 mkdir phalcon-dev
cd phalcon-dev
  Кроме того, вам необходимо указать Heroku, что это приложение является приложением PHP.  Для этого создайте пустой файл с именем composer.json  В системе Unix вы можете создать этот файл следующим образом: 
 touch composer.json
Затем выполните следующее, чтобы инициализировать репо для нашего приложения:
 git init
git add -A
git commit -m" first commit"
Чтобы создать новое приложение Heroku, в которое вы можете нажать, используйте команду CLI create:
 heroku create phalcon-dev
Creating phalcon-dev... done, stack is cedar
http://phalcon-dev.herokuapp.com/ | git@heroku.com:phalcon-dev.git
Git remote heroku added
Это создает приложение на Heroku, готовое и ожидающее нашего кода, а также присоединяет git remote к нашей локальной кодовой базе. Теперь вы готовы развернуть приложение, но кода пока нет. Следуйте следующему разделу, чтобы добавить контент в свое приложение.
  Ваш файл composer.json 
 {
  "require": {
    "php": "5.5.12"
  }
}
Он автоматически установит такие расширения, как mcrypt, mbstring и т. Д. На Heroku. Если вам нужен mongodb, memcached и т. Д., Измените файл дальше:
 {
  "require": {
    "php": "5.5.12",
    "ext-memcached": "*",
    "ext-mongo": "*"
  }
}
  Теперь Heroku включит соответствующие расширения PHP и поместит их в папку support / build / extensions / no-debug-non-zts-20121212 .  Затем создайте файл test.php 
 <?php phpinfo() ; ?>
Наконец, давайте развернем установку Phalcon:
 heroku config:set BUILDPACK_URL=https://github.com/duythien/heroku-buildpack-php
git add -A
git commit -am "installl phalcon"
git push heroku master
Первая команда означает переопределить пакет сборки по умолчанию Heroku, указав пользовательский пакет сборки в конфигурации BUILDPACK_URL var . Через несколько минут результаты выглядят следующим образом:
 Build complete.
Don't forget to run 'make test'.
Installing shared extensions:     /app/.heroku/php/lib/php/extensions/no-debug-non-zts-20121212/
Thanks for compiling Phalcon!
Build succeed: Please restart your web server to complete the installation
important extension phalcon into php.ini
-----> Discovering process types
       Procfile declares types -> (none)
       Default types for PHP   -> web
-----> Compressing... done, 124.0MB
-----> Launching... done, v8
       http://phalcon-dev.herokuapp.com/ deployed to Heroku
To git@heroku.com:phalcon-dev1.git
   4f1d993..e0936a5  master -> master
Это взяло наш код, отправило его в Heroku, идентифицировало его и запустило процесс сборки, подготовив его к развертыванию. Теперь наше приложение живет в интернете! Чтобы убедиться в этом, откройте его сейчас:
 heroku open test.php
Если все идет хорошо, вы должны увидеть следующий экран в вашем браузере:
Настройте веб-корень и разверните образец сайта
  Теперь перейдем к сложной части, которая задает веб-корень.  Для указания корневого веб-узла требуется немного больше работы и справочной информации.  Корень приложения веб-сайта Phalcon в дереве git — это /app/phalcon-website/public  Для Heroku по умолчанию корень сети является корнем git-дерева.  Этот каталог внутренне сопоставлен с /app  Чтобы изменить это, нам нужно создать так называемый Procfile, который запускает sh-скрипт при каждом запуске веб-узла приложения Heroku.  Затем этот сценарий изменяет конфигурацию сервера и включает вашу собственную конфигурацию, которая устанавливает корневой веб-каталог в /app/phalcon-website/public  Создайте файл Procfile со следующим содержимым (если вы используете Apache): 
 web: vendor/bin/heroku-php-apache2 phalcon-website/public
Клонируйте веб-сайт Phalcon в папку репо, и когда это будет сделано, команда git push отправляет все коммиты на локальном мастере в центральный репозиторий.
 cd && cd phalcon-dev
git clone --depth=1 http://github.com/phalcon/website phalcon-website
git add Procfile phalcon-websiste/
git commit -am " test phalcon website"
git push heroku master
Посетите общедоступный URL-адрес приложения и вуаля, здесь у вас есть работающий клон Phalconphp.com на Heroku.
В заключение
Установка Phalcon (или любого другого расширения PHP) на Heroku, очевидно, не является ни простой, ни простой, но если вы используете buildpack-пакеты, она становится намного более доступной.
Оставьте свой отзыв в комментариях ниже и, как всегда, поделитесь этой статьей, если она вам понравилась!

