Подтвердить что ты не робот

Каковы наилучшие практики для самообновления приложений PHP + MySQL?

В настоящее время довольно стандартная практика для самообновления настольных приложений. На Mac каждая программа, не использующая Apple, которая использует Sparkle в моей книге, является мгновенной победой. Для разработчиков Windows это уже обсуждалось подробно. Я еще не нашел информацию о самообновляющихся веб-приложениях, и надеюсь, что вы сможете помочь.

Я создаю веб-приложение, предназначенное для установки как Wordpress или Drupal - разархивируйте его в каталог, нажму на какую-то страницу установки и он готов к работе. Чтобы иметь широкую совместимость с сервером, меня попросили использовать PHP и MySQL - это MP? В любом случае он должен быть широко-кросс-платформенным. Для контекста это в основном унифицированное приложение для веб-сообщений для малого бизнеса. Это не другая платформа CMS, подумайте о веб-почте.

Я хочу знать о самообновляющихся веб-приложениях. Прежде всего, (1) это плохая идея? Начиная с Wordpress 2.7, автоматическое обновление - это единственная кнопка, которая кажется легкой, и все же я могу представить себе так много способов, которые это могло бы пойти ужасно, ужасно неправильно. Кроме того, не является ли идея, что веб файлы могут быть записаны в веб-процессе в виде дыры в безопасности?

(2) Стоит ли время разработки? В мире, вероятно, есть миллионы установок WP, поэтому, вероятно, стоит потратить время, чтобы команда WP упростилась, сохранив миллионы человеко-часов по всему миру. Я могу только представить несколько тысяч установок моего программного обеспечения - это создание самообновления, которое стоит времени на инвестиции, или я могу предположить, что пользователи, достаточно усложненные для загрузки и установки веб-программного обеспечения, в первую очередь могут пройти контрольный список обновлений?

Если это не катастрофа безопасности или трата времени, то (3) я ищу предложения от всех, кто это сделал раньше. Вы сохраняете таблицу версий в своей базе данных? Как вы управляете обновлениями БД? Какой метод вы используете для отката частичного обновления в контексте самообновляющегося веб-приложения? С помощью слоя ORM стало проще или сложнее? Вы сохраняете дельту изменений в версии или вы просто каждый раз взрываете все это?

Я ценю ваши мысли об этом.

4b9b3361

Ответ 1

Честно говоря, это действительно зависит от вашей пользовательской базы. Существует множество приложений PHP, которые не обновляются автоматически автоматически. Их пользователи либо достаточно технические, чтобы обрабатывать процесс обновления, либо просто не обновлять.

Я назначаю два шага:

1) Серьезно спросите себя, что вам действительно нужно пользователям. Будет ли самообновление обеспечить достаточный импульс для принятия, чтобы оправдать дополнительную работу? Если вы уверены, что ответ "да", просто сделайте это.

Поскольку вы спрашиваете здесь, я бы предположил, что вы еще не знаете. В этом случае я назначаю шаг 2:

2) Выпустите версию 1.0 без функции. Дождитесь обратной связи с пользователем. Ваши пользователи могут сразу плакать за более простой процесс обновления, и в этом случае вы должны определить приоритет. Кроме того, вы можете обнаружить, что ваши пользователи гораздо больше интересуются некоторыми другими функциями.

Угадайте, чего хотят ваши пользователи, не спрашивая их, это хороший способ потратить много времени на то, что люди действительно не нуждаются.

Ответ 2

Я думал об этом в последнее время в отношении изменений схемы базы данных. На данный момент я копаю в WordPress, чтобы посмотреть, как они обрабатывают изменения базы данных между версиями. Вот что я нашел до сих пор:

$wp_db_version загружается из wp-includes/version.php. Эта переменная соответствует номеру версии Subversion и обновляется при изменении wp-admin/includes/schema.php. (Возможно, с помощью крючка? Я не уверен.) Когда загружается wp-admin/admin.php, параметр WordPress с именем db_version считывается из базы данных. Если это число не равно $wp_db_version, загружается wp-admin/upgrade.php.

wp-admin/includes/upgrade.php включает функцию, называемую dbDelta(). dbDelta() сканирует $wp_queries (строка SQL-запросов, которая будет создавать самую последнюю схему базы данных с нуля) и сравнивает ее с схемой в базе данных, изменяя таблицы по мере необходимости, чтобы схема была обновлена ​​до последней.

upgrade.php затем запускает функцию с именем upgrade_all(), которая запускает определенные функции upgrade_NNN(), если $wp_db_version меньше целевых значений. (т.е. upgrade_250(), обновление WordPress 2.5.0, будет запущено, если версия базы данных будет меньше 7499.) Каждая из этих функций выполняет свои собственные миграции данных и процедуры популяции, некоторые из которых вызывается во время начальной настройки базы данных script. Красиво сокращает дублированный код.

Итак, это один из способов сделать это.

Ответ 3

Да, это была бы функция безопасности, если бы PHP пошел и перезаписал свои файлы из какого-либо места в Интернете без предупреждения. Там нет гарантии, что сервер правильно подключается к вашему серверу обновлений (он может загрузить какой-то код, созданный кем-то другим, если произошло заражение DNS) - предоставление кому-то другому доступа к вашим данным клиента. Поэтому цифровое подписание было бы важным.

Пользователь может управлять обновлениями, устанавливая разрешения в веб-каталоге, чтобы PHP имел доступ только к чтению файлов - эта процедура может быть просто документирована с вашей программой.

Остается один вопрос (я действительно не знаю ответа): может ли PHP перезаписывать файлы, если он в настоящее время их использует (например, если необходимо обновить файл update.php)? Стоит проверить.

Ответ 4

Я предполагаю, что вы уже приняли это решение, но вы можете разместить его как службу. (Think wordpress.com)

Ответ 5

Я предлагаю вам упаковать ваше приложение с помощью pear и настроить канал. Затем ваши пользователи могут обновить приложение через стандартный интерфейс (груша). Это не полностью автоматическое (если у пользователей нет какой-либо автоматизации, работающей поверх груши), но она стандартная, поэтому любой системный администратор может ее поддерживать.

Ответ 6

Я думаю, что ваш лучший вариант - это механизм проверки обновлений, который будет предупреждать администратора о том, что есть обновления (ов).

Как вы помните, существует ряд потенциальных проблем безопасности. Из-за этого я предлагаю не делать этого. Вместо этого попробуйте создать довольно умное обновление script.

Ответ 7

Только мои 2 цента: я бы рассмотрел приложение автоматической самообучения в своей CMS как дыру в безопасности, поэтому, если вы решите закодировать эту функцию, вам следует рассмотреть возможность реализации различных уровней этого поведения:

  • Автоматическое обновление
  • Проверить наличие обновлений и уведомить
  • Отключить