Как эффективно управлять несколькими установками веб-приложения?

После выполнения:

import 'package:intl/date_symbol_data_local.dart';

String localeName = "pt_BR"; // "en_US" etc.
initializeDateFormatting(localeName);

Используйте это:

static List<String> weekDays(String localeName) {    
    DateFormat formatter = DateFormat(DateFormat.WEEKDAY, localeName);
    return [DateTime(2000, 1, 3, 1), DateTime(2000, 1, 4, 1), DateTime(2000, 1, 5, 1),
      DateTime(2000, 1, 6, 1), DateTime(2000, 1, 7, 1), DateTime(2000, 1, 8, 1),
      DateTime(2000, 1, 9, 1)].map((day) => formatter.format(day)).toList();
}

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

17
задан Community 23 May 2017 в 11:48
поделиться

13 ответов

Я думаю с помощью системы управления версиями и "переходя" часть кодов, которые необходимо изменить, мог оказаться лучшим подходом с точки зрения устойчивости и эффективности.

распределенная система версии А могла подойти лучше всего для Ваших потребностей, так как она позволит Вам обновлять свои "базовые" функции беспрепятственно на различных "ответвлениях" при сохранении некоторых изменений локальными в случае необходимости.

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

8
ответ дан 30 November 2019 в 12:08
поделиться

Гм это могла быть идея добавить конфигурационные файлы? Вы записали, что много маленького сценария делает что-то. Теперь, если Вы встроили бы их в источники и регулировали бы их с конфигурационными файлами разве, которые не должны "упрощать" это?

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

кажется, что комбинация управлений версиями, параметров конфигурации и/или получений развертывания, кажется, "хорошая" идея.....

1
ответ дан 30 November 2019 в 12:08
поделиться

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

Поэтому, если Вы думаете, Подверсия была бы утомительна, у Вас есть здравый смысл для того, каковы болевые точки будут... Лично, я не рекомендовал бы Подверсию для этого, так как это не действительно настолько хорошо в управлении & отслеживание ответвлений. Хотя предложение benlumley для использования внешнего облика для базового программного обеспечения является хорошим, это ломается, если необходимо настроить базовый код для клиентских сайтов.

Изучают Мерзавца для управления версиями, оно создается для ветвления, и это быстро.

Выезд Capistrano для управления Вашим развертыванием. Это - рубиновый сценарий, часто используемый с направляющими, но это может использоваться для всех видов управления файлами на удаленных серверах, даже нерубиновых сайтах. Это может получить содержание к удаленному концу через различный stragegies включая ftp, scp, rsync, а также автоматически проверку последней версии из Вашего репозитория. Хорошие функции, которые это обеспечивает, включают рычаги обратного вызова для каждого шага развернуть процесса (например, таким образом, можно скопировать сайт-специфичные конфигурационные файлы, которые не могли бы быть в управлении версиями), и система журнала выпуска - сделанный через символьные ссылки - таким образом, можно быстро откатывать к предыдущему выпуску в случае проблемы.

я рекомендовал бы файл конфигурации со списком ответвлений и их размещенного местоположения, затем пробежал бы это со сценарием, который проверяет каждое ответвление в свою очередь и загружает последние изменения. Это могло быть cron'd, чтобы сделать ночные обновления автоматически.

1
ответ дан 30 November 2019 в 12:08
поделиться

Если бы Вы используете стек LAMP, я определенно превратил бы файлы решений в пакет Вашего распределения и использовал бы его для, распространяют изменения. Я рекомендую в этом отношении Redhat/Fedora из-за об/мин, и это - то, в чем у меня есть опыт. Так или иначе можно использовать базирующееся распределение любого Debian также.

Когда-то назад я сделал решение для ЛАМПЫ для управления ISP хостинг-сервера. У них было несколько серверов для заботы о веб-хостинге, и мне был нужен способ развернуть изменения моего менеджера, потому что каждая машина была автономной и имела менеджера онлайн. Я сделал RPM-пакет, содержащий файлы решения (php главным образом) и некоторые развертывающиеся сценарии что runned с об/мин.

Для автоматизированного обновления у нас был наш собственный набор репозитория об/мин на каждом сервере в yum.conf. Я установил crontab задание для обновления серверов ежедневно с последним RPMs от того доверяемого хранилища.

Верность может быть, достигают также, потому что можно использовать доверительные настройки в RPM-пакетах, как подписание их с файлом с открытым ключом, и принятие только подписало пакеты.

1
ответ дан 30 November 2019 в 12:08
поделиться

Как люди уже упомянули, что использование управления версиями (я предпочитаю Подверсию из-за функциональности) и ветвление были бы наилучшим вариантом. Другое программное обеспечение с открытым исходным кодом, доступное на SourceForge, названной cruisecontrol. Ее удивительное, Вы настраиваете cruisecontrol с подверсией в sach способ, которым любой модификацией кода или новым кодом, добавленным в serversion, Круиз-контроль будет знать автоматически и сделает сборку для Вас. Это сохранит Ваш ад времени.

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

1
ответ дан 30 November 2019 в 12:08
поделиться

Вы посмотрели на инструменты такой как Марионетка (для системного администрирования, включая развертывание приложения) или Capistrano (развертывание приложений в RubyOnRails, но не ограничили ими)?

1
ответ дан 30 November 2019 в 12:08
поделиться

Одна опция состояла бы в том, чтобы настроить систему управления версиями только для чтения (Подверсия). Вы могли интегрировать доступ к репозиторию в Ваш CMS и вызвать обновления через меню, или автоматически если Вы не хотите, чтобы у пользователя был выбор относительно обновления (могло бы быть очень важным). Используя систему управления версиями также позволил бы Вам сохранять различные ответвления легко

1
ответ дан 30 November 2019 в 12:08
поделиться

Не уверенный, сказал ли кто-то это, существует много долгих ответов здесь, и я не считал их всех.

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

, можно затем использовать его соединительную линию (или определенное ответвление/тег, если Вы предпочитаете) как svn:external в каждом проекте, который требует его. Таким образом, любые обновления, которые Вы делаете к CMS, можно передать назад его репозиторию и вытянут в другие проекты как и когда они - обновленный svn (или внешним является svn:switch 'редактор).

Как часть создания этого легче, необходимо будет удостовериться, что CMS и пользовательская функциональность находятся в различных папках, так, чтобы svn внешний облик работал правильно.

IE:

project
 project/cms <-- cms here, via svn external
 project/lib <-- custom bits here
 project/www <-- folder to point apache/iis at

(у Вас могли быть cms и lib под www папкой в случае необходимости)

Это позволит Вам перейти/отметить каждый проект, как Вы желаете. Можно также включить svn:external местоположение на основание ответвления/тега.

С точки зрения получения живых изменений, я предложил бы, чтобы Вы сразу избавились от ftp и использовали rsync или svn контроль/экспорт. Обе работы хорошо, выбор ваше дело.

у меня есть большая часть опыта с маршрутом rsync, rsyncing экспорт svn в сервер. При потере работоспособности по этому маршруту запишите некоторые сценарии оболочки, и можно создать тестовый сценарий оболочки, чтобы показать Вам файлы, которые он загрузит, не загружая их также, с помощью флага-n. Я обычно использую пару сценариев для каждой среды - одна тест и один, чтобы на самом деле сделать это.

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

Вы могли также поддержать другой сценарий оболочки для того, чтобы сделать объемные обновления, который просто называет соответствующий сценарий оболочки для каждого проекта, который Вы хотите обновить.

4
ответ дан 30 November 2019 в 12:08
поделиться

Вы посмотрели на Drupal? Нет, чтобы не развернуть и заменить то, что Вы имеете, но видеть, как они обрабатывают настройки и сайт-специфичные модули?

В основном, существует папка "сайтов", которая имеет каталог для каждого сайта, который Вы размещаете. В каждой папке отдельный settings.php, который позволяет Вам указывать другую базу данных. Наконец, у Вас могут (дополнительно) быть "темы" и папки "модулей" на сайтах.

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

2
ответ дан 30 November 2019 в 12:08
поделиться

Встраивают в код процесс самообновления.
Это проверит на обновления и выполнит их when/where/how, Вы настроили его для клиента.

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

Обновления являются идеально несколькими ключевыми шагами.

  1. Резервное копирование a) , таким образом, можно отступить. необходимо смочь отступить все обновление в любое время. Так, это означает создавать локальный архив приложения и базы данных сначала.

    Процесс контроля Обновления b) - Имеют системный телефон CMS домой для поиска новой сборки.

    Обновление Расписания c) на доступности - Возможности - Вы, не хотят, чтобы обновление выполнило второе, это доступно. Это означает, что необходимо будет создать крон/агент некоторого вида, чтобы сделать системное обновление автоматически в середине ночи. Можно также полагать, что клиентские требования обновляют по выходным, или в определенные дни. Можно также поразить развертывание обновлений, таким образом, Вы не обновляете 1 000 клиентов за 1 день и получаете ад технической поддержки. Ступенчатое развертывание некоторого вида могло бы быть выгодным для Вас.

    d) Добавляют режим техобслуживания для обновления сайта - Удар сайт в режим техобслуживания.

    контроль e) SVN или загружаемые пакеты - идеально можно развернуться через svn контроль и в противном случае установить сервер для поставки, svn генерировал пакеты в архив, который может быть развернут на клиентских сайтах.

    f) Развертывает Сценарии DB - Резервное копирование базы данных, обновляет их, заполняет их

    код сайта Обновления g) - Вся эта работа для одного шага.

    h) Запускает некоторые тесты на нем. , Если бы Вашему коду встроили самопроверки, это было бы идеально.

2
ответ дан 30 November 2019 в 12:08
поделиться

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

На данный момент, создавая ответвления SVN может быть единственное решение, которое помогает Вам сохранить свою исправность. В Вашем текущем состоянии почти неизбежно, что Вы сделаете ошибку и испортите сайт клиента. По крайней мере, с ответвлениями у Вас, как гарантируют, будет стабильная кодовая база для каждого клиента. Единственный глюк с ответвлениями SVN - то, если Вы перемещаете или переименовываете файл в ответвлении, невозможно объединиться, которые возвращаются вниз к соединительной линии (необходимо было бы сделать это вручную).

Удачи!

РЕДАКТИРОВАНИЕ: Для примера хорошо разработанного приложения с помощью всех принципов я обрисовал в общих чертах выше, см. Электронная коммерция Magento . Magento является самым мощным, расширяемым и легким настроить веб-приложение, с которым я работал до сих пор.

6
ответ дан 30 November 2019 в 12:08
поделиться

Я могу быть неправым, но мне кажется, что Aron, после не управление версиями. Управление версиями является большим, и я уверен, что они уже используют его, но для управления обновлениями на сотнях установок в соответствии с условиями заказчика, Вам нужно что-то еще.

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

, Например, скажем, Вы создали новую версию 3 своего модуля 'Wiki'. Вы хотите распространить новую версию ко всем серверам, запускающим Ваше приложение, но Вы внесли изменения в один из интерфейсов в модуле Wiki начиная с версии 2. Теперь, для всех стандартных установок, который не является никакой проблемой, но это повредило бы установки с пользовательскими расширениями сверху старого интерфейса. Хорошо запланированная система пакета заботилась бы об этом.

Для рассматривания вопроса безопасности необходимо изучить использование цифровых подписей на патчах. Существует много хороших библиотек available for public-key-based подписи, поэтому просто пойдите с тем, что, кажется, стандарт для Вашей выбранной платформы.

4
ответ дан 30 November 2019 в 12:08
поделиться

Вот то, что я делаю...

Определенный для клиента включают путь

  • , Общий, общий код находится в [1 113] shared/current_version/lib /
  • Сайт, определенный код находится в [1 114] clients/foo.com/lib
  • , который включать путь установлен для включения от clients/foo.com/lib, и затем доля/lib
  • , Все это находится в системе управления версиями

, Это гарантирует, что код использует совместно используемые файлы по мере возможности, но если я должен переопределить конкретный класс или файл по некоторым причинам, я могу записать клиенту определенную версию в их папке.

общие файлы Псевдонима

Моя виртуальная конфигурация хоста будет содержать строку как [1 110]

Alias /common <path>/shared/current_version/public_html/common

, Который позволяет общим элементам UI, значкам, и т.д. быть совместно использованными через проекты

Тег общий код с каждым выпуском

сайта После каждого выпуска сайта, я отмечаю общий код путем создания ответвления для эффективного замораживания того момента времени. Это позволяет мне развертывать/shared/version_xyz/на живом сервере. Затем я могу иметь виртуальное использование хоста конкретная версия общих файлов или оставить его указывающий на current_version, если я хочу, чтобы это взяло последние обновления.

2
ответ дан 30 November 2019 в 12:08
поделиться
Другие вопросы по тегам:

Похожие вопросы: