A
не использует super
, поэтому его нельзя использовать для кооперативного наследования. Вместо этого определите оболочку для A
, согласно Python's super()
считается супер! . (Предполагая, что вы не можете просто исправить A
в первую очередь.)
class A:
def __init__(self):
print("Started A's constructor")
print("Ended A's constructor")
# AWrapper also needs to override each method defined by A;
# those simply delegate their work to the intenral instance of A
# For example,
#
# def some_method(self, x, y):
# return self.a.some_method(x, y)
#
class AWrapper:
def __init__(self, **kwargs):
self.a = A()
super().__init__(**kwargs)
class B:
...
class C(AWrapper, B):
...
Часто задаваемые вопросы по Subversion , похоже, рекомендуют развертывание как средство проверки, автоматически обновленное с помощью сценариев ловушек после фиксации. Они не позволяют Apache экспортировать папки .svn (вероятно, хорошая идея), добавляя в httpd.conf следующее:
# Disallow browsing of Subversion working copy administrative dirs.
<DirectoryMatch "^/.*/\.svn/">
Order deny,allow
Deny from all
</DirectoryMatch>
Я сам новичок в svn, но, возможно, вы могли бы запустить сценарий ловушки при создании нового тега. Таким образом, когда вы будете готовы обновить работающий сайт, вы просто сохраните свои последние изменения в стволе, создадите новый тег, и скрипт обновит ваш действующий сайт с помощью svn update.
По моему скромному мнению, необходимо создать ответвление/тег, где у Вас есть (желаемое) подмножество dev ENV, который Вы используете для производства. Кто-то должен или поддержать это вручную или автоматически использование сценариев. Затем необходимо экспортировать (а не контроль). Инкрементные обновления являются надуманным вопросом, если Вы не изменяете файлы на своей продуктивной среде, и Вы не хотите, чтобы те файлы были перезаписаны.
Просто мои 0,02$
Никакой вопрос - экспорт.
Вы не сделали бы обновления, таким образом, никакая причина иметь контроль. Вы просто развернули бы спам.
я сказал бы, что любая среда должна быть только экспортом; Вы только используете контроль локально, когда Вы разрабатываете. Конечно, мы также используем сценарии сборки, так обновление развертывания так же просто как выполнение сценария.
До в коде разработки, создайте ответвления для любой сделанной работы. Только согласитесь на соединительную линию, когда готовый к развертыванию на среде разработки.
Я изучил бы некоторое программное обеспечение развертывания как Capistrano (это - рубиновая программа)
, я лично использовал бы экспорт теговой копии соединительной линии вместо того, чтобы просто экспортировать соединительную линию, если Вы собираетесь использовать прокрутить Ваше собственное решение или вручную.
Я развертываю его как копию. Не ручной, конечно.
я использую, 'делают' и 'checkinstall'. Я создаю небольшой Make-файл, который использует системную команду 'установка' для копирования всех необходимых файлов в соответствующие каталоги на веб-сервере, и я имею, предварительно устанавливают и постустанавливают сценарии оболочки, которые будут выполнены на сервере.
, Когда время для развертывания настает, я просто выполняю 'checkinstall', который создает пакет (об/мин, DEB или TGZ, в зависимости от которого дистрибутива Linux я нацелен). Я устанавливаю его с помощью обычных инструментов, обеспеченных диспетчером пакетов дистрибутива Linux (об/мин, dpkg, pkgtool). Конечно, если Вы хотите отследить зависимости также, можно использовать конфетку, склонный - добираются, и т.д.
Она делает его действительно легким, если Вы хотите распределить новую версию своего веб-приложения. к нескольким целевым серверам. И материал как удаление, возвращаясь к более старой версии, и т.д. очень легок, потому что у Вас есть готовое для использования пакета для каждой версии, которую Вы развернули.
Это не могло бы часто соответствовать Вашему 'нажатию' стратегия хотя при использовании некоторого материала, которому нужна компиляция. Однако для сценариев материала (как PHP, который я делаю), создавая пакет (приблизительно 300 + файлы PHP) занимает приблизительно 20 секунд на моей машине. И почти так же устанавливать его в любой целевой системе.
Для разделения кода 'для выпуска' от кода 'в разработке' я использую ветвление. С Мерзавцем это действительно легко, так как ветвление является дешевым и быстрым.
Я боролся с этим и, думаю, наконец-то решил проверить. Да, там есть дополнительный мусор, но ...
Не говоря, что это будет работать для всех, но эти две вещи повлияли на мое решение. Желаем удачи в вашем решении.
Лично я всегда сомневаюсь в решении этой проблемы, {{ 1}} Я предпочитаю, чтобы в моей производственной среде не было каталогов ".svn", это очень грязно , но в то же время экспорт очень утомителен для больших веб-приложений (особенно при использовании некоторых сторонних "компонентов", таких как Extjs, FCKeditor и т. Д.).
Я думаю, что на данный момент нет «убийственных решений».
позвольте мне посмотреть ..... ln -s? для чего это можно использовать?
/var/www/www.my-prod-site.com/public/
/var/www/www.my-prod-site.com/builds/Rev 1/
/var/www/www.my-prod-site.com/builds/Rev 2/
/var/www/www.my-prod-site.com/builds/Rev 3/
/var/www/www.my-prod-site.com/builds/Rev 99/
svn экспорт в каталоги сборок ...... скопируйте любые файлы конфигурации из / public, это ваша символическая ссылка на вашу предыдущую сборку выпуска, а затем просто переместите символическую ссылку из общедоступной чтобы указать на ваш новый каталог сборки. это занимает меньше времени в автономном режиме, чем любая из вещей, которые я видел здесь, и это также позволяет возвращаться НАМНОГО БЫСТРЕЕ, если вы не ck каждый раз загружаете свою базу данных, изменяя таблицы.