Ошибка 500 обычно указывает на сбой вашей программы по какой-то причине, хотя, не просматривая журналы, трудно точно сказать, почему.
Я предполагаю, что в части
const vitamin_type = conv.parameters[VITAMINS_ENTITY].toLowerCase();
у вас нет параметра с именем «Витамины». Имена параметров чувствительны к регистру, и все они обычно строчные. Таким образом, conv.parameters[VITAMINS_ENTITY]
оценивается как undefined
, а undefined
не имеет функции .toLowerCase()
.
Кроме того, у вас есть по крайней мере одна логическая проблема в вашем коде. Строка
const vitamin_type = conv.parameters[VITAMINS_ENTITY].toLowerCase();
, которая проверяет строчку vitamin_type
в нижнем регистре. Так что такие ценности, как «витамин А».
Но когда вы проверяете значения, вы используете сравнения, такие как
if (vitamin_type == 'Vitamin A') {
, где вы сравниваете их с такими значениями, как «Витамин А». Таким образом, значения никогда не будут совпадать.
Поскольку ни одно из значений не будет совпадать, вы выйдете из функции без вызова conv.ask()
, что приведет к ошибке. (Хотя не ошибка 500.)
Я положительно удивлен, что это не дубликат, но я не могу найти другой.
Хорошо, вот соглашение. Они - двухлетние отдельные, но связанные вопросы.
Для управления сборками существенный момент - то, что у Вас должна быть автоматическая, повторяемая сборка, которая восстанавливает весь набор программного обеспечения с нуля и переходит полностью к Вашей поставляемой конфигурации. другими словами, необходимо создать эффективно предвыпускную версию каждый раз. Много проектов действительно не делают этого, но я видел, что он записывает людей (чтение, "записанный им") слишком много раз.
Непрерывная интеграция говорит, что этот процесс сборки должен быть повторен каждый раз, когда существует событие существенного изменения к коду (как регистрация) если вообще возможно. Я сделал несколько проектов, в которых это превращалось в сборку каждую ночь, потому что код был достаточно большим, который потребовалось несколько часов для создания, но идеал должен настроить процесс сборки так, чтобы некоторый автоматический механизм---как файл скрипта Ant или make-файл---только восстановил части, затронутые изменением.
Вы обрабатываете проблему обеспечения определенного выпуска некоторым способом, сохраняющим точную конфигурацию всех затронутых артефактов для каждой сборки, таким образом, можно применить повторяемый процесс сборки к точной конфигурации, Вы имели. (Вот почему это называют "управлением конфигурацией".) обычные инструменты управления версиями, как мерзавец или подверсия, обеспечивают способы определить и назвать конфигурации, таким образом, они могут быть восстановлены; в svn, например, Вы могли бы создать тег для конкретной сборки. Просто необходимо иметь в наличии определенные метаданные, таким образом, Вы знаете, какую конфигурацию Вы использовали.
Вы могли бы хотеть считать одно из "Прагматического Управления версиями" книги, и конечно материал на CI и Круиз-контроль на сайте Martin Fowler важны.
Длинная короткая история: Создайте ответвление, скопированное с соединительной линии и контроля/сборки Ваш выпуск на том ответвлении по серверу сборки.
Однако для получения до той точки полностью автоматизированным способом с помощью cc.net не легкая задача. Я мог сообщить подробности о нашем процессе сборки, если Вам нравится, но это является, вероятно, слишком мелкомодульным для этого обсуждения.
Я соглашаюсь с Charlie о наличии автоматической, повторяемой сборки с нуля. Но мы не делаем всего для "Непрерывной" сборки, только для Ночного, Беты, Еженедельно или Омеги (GA/RTM/Gold) сборки конечных версий. Просто, потому что некоторые вещи, как генерация документации, могут занять много времени, и для непрерывной сборки Вы хотите предоставить разработчику быструю обратную связь на результате сборки.
Я полностью соглашаюсь с сохранением точной конфигурации, которая является, почему, переходя выпуск или метки - необходимость. Если необходимо поддержать выпуск, т.е. Вы не можете только выпустить другую копию соединительной линии, то ответвление по подходу выпуска является способом пойти, но необходимо будет стать довольными слиянием.
Взгляд на непрерывную интеграцию: лучшие методы, от Martin Fowler.
Ну, мне удалось найти связанный поток, я участвовал в год назад. Вы могли бы найти это полезным, также. И вот то, как мы делаем это.
[Отредактированный]
Мы используем Круиз-контроль в качестве инструмента интеграции. Мы просто имеем дело с соединительной линией, которая является основным репозиторием Подверсии в нашем случае. Мы редко вытаскиваем новое ответвление для того, чтобы сделать новые карты истории, когда существует шанс сложных конфликтов. Обычно, мы вытаскиваем ответвление для выпуска версии и создаем сборку из этого и поставляем это нашей тестовой команде. Между тем мы продолжаем работу в соединительной линии и ожидаем обратной связи от тестовой команды. После того как все протестировали, мы создаем тег из ответвления, которое неизменно логически в нашем случае. Так, мы можем выпустить любую версию любое время любому клиенту в случае, если. В случае ошибок в выпуске мы не создаем тег, мы чиним вещи там в ответвлении. После получения всего зафиксированного и утвержденного тестовой командой, мы объединяем изменения назад, чтобы соединить магистралью и создать новый тег из ответвления, характерного для того выпуска.
Так, идея является нашими ответвлениями, и теги действительно не участвуют в непрерывной интеграции, непосредственно. Слияние кода ответвления назад к соединительной линии автоматически делает тот код, становится частью CI (Непрерывная Интеграция). Мы обычно делаем просто bugfixes, для определенного выпуска, в ответвлениях, таким образом, он действительно не участвует в процесс CI, я верю. Наоборот, если мы начинаем делать новые карты истории, по некоторым причинам, в ответвлении, затем мы не держим то ответвление отдельно слишком долго. Мы пытаемся объединить его назад для транкинга как можно скорее.
Точно,
Управление версиями подходит вне непрерывной интеграции.
В Вашем случае необходимо использовать Круиз-контроль для автоматического создания тега, который позволяет разработчикам продолжать кодировать, в то время как возрастающая сборка может произойти.
Если Ваша сборка является возрастающей, который означает, что можно инициировать ее каждый x минуты (а не для каждой фиксации, потому что, если они являются слишком частыми, и если сборка является слишком длинной, она не может иметь времени для окончания, прежде чем следующая сборка попытается произойти). 'x' должен быть адаптирован, чтобы быть длиннее что цикл компиляции/модульного теста.
Непрерывная интеграция должна включать автоматический запуск модульных тестов также.
Кроме того, полный процесс управления версиями включит:
перед окончательным выпуском в производство.
Снова "управление версиями" намного более сложно, чем просто "непрерывная интеграция" ;)
Можно использовать Сервер Основы Команды 2008 и Microsoft Studio Team System для выполнения управления исходным кодом, ветвления и выпусков.