На прошлой неделе Бен Уэйн писал о проблеме, с которой он столкнулся при использовании средств командной строки 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