Статьи

Инструменты командной строки Windows Azure для файлов PHP и web.config

На прошлой неделе Бен Уэйн писал о проблеме, с которой он столкнулся при использовании средств командной строки Windows Azure для PHP для развертывания приложения Zend Framework в Windows Azure. Поскольку я исследовал проблему дальше, я смог обобщить ее и предложить обходной путь, который я объясню в этом посте. (Моя работа по сути такая же, как и у Бена, но я надеюсь, что объясняя ее в контексте обобщенной проблемы, вы сможете избежать головной боли при развертывании любого приложения в Azure, а не только приложений Zend Framework.)

Суть проблемы заключается в следующем: для запуска приложения PHP в Windows Azure приложение должно иметь файл web.config с определенными элементами (в частности, элемент <handlers> должен правильно указывать PHP в качестве обработчика). Если необходимые элементы отсутствуют в файле web.config приложения (или если нет файла web.config ), средства командной строки Windows Azure для PHP добавят необходимые элементы (или создадут файл и добавят элементы ) для развертывания в Azure. Однако этот инструмент не копирует все другие элементы (например, элемент <rewrite> ) в файле web.config в файл, используемый для развертывания в Azure. Но, если необходимые элементы являютсяв файле web.config приложения инструмент корректно копирует все содержимое в файл web.config, используемый для развертывания. Итак, хитрость заключается в том, чтобы вставить необходимые элементы в файл web.config перед запуском инструмента командной строки. (Если это ясно, как грязь, не волнуйтесь. Команда по взаимодействию, которая разрабатывает инструмент, знает об этом и собирается исправить его.)

Чтобы сделать это более конкретным, я проведу вас через шаги, которые я прошел для перемещения локально работающего приложения Zend Framework на платформу Windows Azure (поскольку приложения Zend требуют правила перезаписи). Я начну с учебного приложения Zend Framework, которое я описал, как встроить этот пост: использование Zend Framework и драйвера PDO_SQLSRV .

Примечание . Хотя мой пример основан на приложении Zend Framework, если вы помните об обобщенной проблеме (см. Выше), вы сможете использовать этот пример более широко.

1. Перенесите базу данных в SQL Azure. Это займет всего пару минут с помощью мастера миграции SQL Azure — выполните действия, описанные в разделах « Создание сервера SQL Azure» и « Создание базы данных SQL Azure» в этом посте .

2. Обновите файл application.ini . Обновив следующие параметры в файле application.ini , локально работающее приложение теперь будет работать с серверной частью SQL Azure:

resources.db.params.host = "ServerID.database.windows.net"
resources.db.params.username = UserName@ServerID
resources.db.params.password = Your_Password
resources.db.params.dbname = DB_Name

3. Используйте инструменты командной строки Windows Azure для PHP, чтобы создать файл web.config . На данный момент ваше приложение не имеет файла web.config в своем основном каталоге. Он понадобится для развертывания в Azure, но инструменты командной строки плохо обрабатывают существующие файлы web.config . (Как я упоминал ранее, команда разработчиков знает об этом и намерена это исправить.) Итак, первый шаг к получению правильного файла web.config — позволить инструментам сгенерировать его. Для этого выполните следующую команду из каталога WindowsCommandLineTools4PHP (без разрывов строки):

php package.php --project=ZF-MyAlbums
                --source="C:\inetpub\wwwroot\zf-tutorial"
                --defaultDoc="public/index.php"
                --phpRuntime="Path\to\PHP\installation"
                --target="Path\to\drop\directory"

 

Это сгенерирует файл web.configпапке ZF-MyAlbums_WebRole вашей папки перетаскивания), который содержит все элементы, необходимые для запуска приложения PHP в Azure. Единственное, чего ему не хватает, — это правила переписывания, которые нам нужны для приложения.

Примечание . Если вы не знакомы с инструментами командной строки Windows Azure для PHP, эта статья будет полезна: Развертывание первого приложения PHP с помощью инструментов командной строки Windows Azure для PHP .

4. Update and copy the generated web.config to the application’s main directory. Add the following element to the <system.webserver> element in the generated web.config file and save the file in your application’s main directory:

<rewrite>
    <rules>
        <rule name="Imported Rule 1" stopProcessing="true">
            <match url="^(.*)$" />
            <conditions logicalGrouping="MatchAll">
                <add input="{REQUEST_FILENAME}" matchType="IsFile"
                                                negate="true"
                                                pattern=""
                                                ignoreCase="false" />
            </conditions>
            <action type="Rewrite" url="public/index.php" appendQueryString="true" />
        </rule>
    </rules>
</rewrite>

 

5. Re-run the command line tool to test the application in the Compute Emulator. The following command will generate a new package and start the application in the locally running Compute Emulator (a.k.a. the Development Fabric):

php package.php --project=ZF-MyAlbums
                --source="C:\inetpub\wwwroot\zf-tutorial"
                --defaultDoc="public/index.php"
                --phpRuntime="Path\to\PHP\installation"
                --target="Path\to\drop\directory"
                --cleanRebuild
                --runDevFabric

 

6. Upload package and configuration file to Windows Azure. More on how to do this in this post.

That’s it.

Thanks.

-Brian