Я интересуюсь обнаружением, как люди развертывают свои приложения CakePHP. Ко мне недавно приблизились о выполнении некоторой внештатной разработки CakePHP, которая будет хорошей возможностью для меня получить некоторый опыт на уровне представления (в моем задании FT, я делаю разработку EE Java в уровнях бизнеса и персистентности).
Мои мысли немного дезорганизованы в этой точке, но я рассматриваю следующие сценарии:
Разработчик, работающий в IDE, изменяет файл, который автоматически (в фоновом режиме) синхронизируется с веб-сервером разработки, работающим локально. Этот сценарий - то, как я идеально хотел бы сделать, разработка... вносит изменение и быть в состоянии видеть изменение в действии без любых дополнительных шагов.
Разработчик, работающий в IDE, изменяет файл, который автоматически (в фоновом режиме) синхронизируется через FTP с веб-сервером разработки, работающим удаленно. Этот сценарий был бы полезен, когда я путешествую с помощью своего нетбука (который выполняет мой IDE достаточно медленно, как это без веб-сервера в соединении).
Средствами разработки, которыми я являюсь самым довольным, является Eclipse, Муравей и Подрывная деятельность. Мое предпочтение состоит в том, чтобы продолжить использовать их, но я рассмотрел бы переключение, если выполнение так помогает достигнуть сценариев.
Вопросы:
Извините за такое количество вопросов в одном сообщении, но я думаю, что вопросы все связаны и думали, что будет полезно сохранить обсуждение в одном месте.
Будучи ленивым, я не проверяю это, но не должна эта работа
private int FindClosest(IEnumerable<int> numbers, int x)
{
return
numbers.Aggregate((r,n) => Math.Abs(r-x) > Math.Abs(n-x) ? n
: Math.Abs(r-x) < Math.Abs(n-x) ? r
: r < x ? n : r);
}
-121--3853861- def func(*args):
pass
Когда вы определяете функцию этого пути, * args
будет массив аргументов, переданных функции. Это позволяет вашей функции работать, не зная заранее, сколько аргументов будет передано ей.
Вы делаете это и с аргументами ключевых слов, используя * * kwargs
:
def func2(**kwargs):
pass
См.: Произвольные списки аргументов
В вашем случае вы определили класс, который действует как словарь. Метод dict.pop
определяется как pop (клавиша [, по умолчанию])
.
Метод не использует параметр default
. Однако определение метода с помощью * args
и передача * args
в dict.pop ()
позволяет вызывающему абоненту использовать параметр default
.
Другими словами, можно использовать метод pop
класса, например dict.pop
:
my_a = a()
value1 = my_a.pop('key1') # throw an exception if key1 isn't in the dict
value2 = my_a.pop('key2', None) # return None if key2 isn't in the dict
-121--832277- Являются ли эти разумные сценарии или мне нужно думать о разработке и развертывании по-другому?
Кажется разумным, хотя синхронизация FTP заставляет меня думать о Dreamweaver.:
Рассмотрите возможность использования среды IDE, которая позволяет подключаться к серверу по (S) FTP, или используйте один из следующих...
Какие инструменты могут упростить разработку/развертывание? Лучше бы мне свернуть свое собственное решение с Ant, скрипты и т.д.?
Дженкинс , Капистрано , Финг , Муравей, git push/pull
, rsync
и т. д.
Как мы решаем проблемы с базой данных во время развертывания? Как указаны свойства подключения к базе данных для конкретного развертывания? Что делать, если обновление до более новой версии (или возврат к более старой версии) приложения CakePHP требует изменения схемы базы данных и миграции данных?
Используйте cake scheme generate
и cake schema run update
.
Как настроить свойства, различающиеся в разных развертываниях? Например, рассмотрим повышенные уровни отладки и ведения журнала, используемые во время разработки, препятствующие отправке платежей в платежные шлюзы во время разработки и т.д.
Имена файлов, которые соответственно различаются (т. е. core.php.prd
vs core.php.dev
) и переименовать при установке.
Как обновление или восстановление развертывания влияет на клиентов? Например, что делать, если они находятся в середине транзакции (например, покупка продукта)?
Чтобы файлы приложения не оказались в несогласованном состоянии, необходимо начать с извлечения новой копии приложения в новую папку. Скопируйте все отправленные пользователем файлы, переименуйте файлы * .prd
, а затем измените старую копию на новую (переименовав или используя symlinks). Сеансы должны храниться где-то, где они переживут модернизацию (т.е. php
или база данных
,вместо торт
).
Как работать с различными типами установки CakePHP? В зависимости от типа установки может потребоваться установка файлов в различных местах. Как узнать, где должны быть установлены файлы? Книга CakePHP описывает разработку, производство и расширенные установки.
Установка разработчика является такой же безопасной, как и любой PHP- приложение, использующий файлы .htaccess
для перенаправления запросов (пользователи не увидят ваш код, если вы не удалите/не настроите mod _ reprite
и PHP). Производственная установка немного сложнее, если не изменить корни документов виртуальных хостов. Расширенная установка позволяет установить Cake в любом месте файловой системы, но усложняет работу (поскольку файлы находятся в двух отдельных местах, но могут находиться в одном репо)