Лучшие практики развертывания веб-приложения: как управлять локальными и живыми файлами?

Здесь:

int priority[n],min=at_copy[0],k,j;
for(j=0;j<n;j++){
    min=at_copy[0];
    for(i=0;i<n;i++){
        if(at_copy[i]<min){
            min=at_copy[i];
            k=i;
        }
    }
    at_copy[k]=999;
    ...

Представьте, что происходит, когда at_copy[0] является минимальным значением. Тогда условие atcopy[i]<min никогда не выполняется, и k остается неинициализированным, что приводит к выходу за пределы этой области:

    at_copy[k]=999;

Вы должны инициализировать k с помощью 0, так как вы предполагаете в первом итерации, что at_copy[0] является минимумом.

int priority[n],min=at_copy[0],k=0,j;

С Geeks-IDE вы, возможно, были «везунчиками», и k имел значение 0 без инициализации.

9
задан DOK 15 February 2009 в 18:39
поделиться

7 ответов

Если FTP-сервер поддерживает символьные ссылки, можно использовать следующую технику:

  1. Сделайте public_html папку символьной ссылкой на папку, содержащую текущую версию. ("version1", например)
  2. Загрузите новую версию в новой папке.
  3. Когда загрузка завершается, измените символьную ссылку, таким образом, новая версия становится активной.

Если что-то пошло не так, как надо, можно легко вернуться к предыдущей версии путем изменения символьной ссылки снова.

Для базы данных и других настроек, которые отличаются в продуктивной среде, существует несколько опций:

  • Создайте файл, содержащий среду: "живите" или "локальный" и помещенный "если оператор" в код на основе параметра среды.
  • Если Вы можете к dectect среда в php, используйте это вместо файла.
  • Поместите все настройки в файл вне "versionX" папок.
6
ответ дан 4 December 2019 в 15:26
поделиться

1) Для решения "другой конфигурации на dev и живых серверах" проблема, я использую это:

// Change 'localhost' to your dev server's address
define('IS_LIVE', 'localhost' != $_SERVER['HTTP_HOST']);

// Database configuration
$db_cfg = IS_LIVE?
  array(...): // Live server config
  array(...); // Dev server config

2) Сохранять dev и живые файлы синхронизировало, я использую Вне всякого сравнения, визуальный различный инструмент, который позволяет мне сравнивать целые каталоги, включая удаленные через (S) FTP.

Я установил профиль так, чтобы левое окно показало файлы на dev сервере, правильный показывает файлы на живом сервере. Этот путь I видит то, что различия там между серверами (измененный, отсутствуя или добавленные файлы), и позволяет мне легко копировать целые каталоги, файлы или определенные строки в файлах между ними. Очень полезный.

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

2
ответ дан 4 December 2019 в 15:26
поделиться

Движущиеся файлы

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

rsync -av --cvs-exclude /soure/dir user@example.com:./source/dir    

- cvs-исключают флаг, назван немного обманчиво. Это заставит rsync проигнорировать файлы, которые rcs программа cvs игнорирует, не только .cvs каталоги. Можно получить больше информации о флагах путем выполнения

rsync --help

Сервер, на котором Вы размещаете свое приложение, должен будет выполнять rsync демона, но это - паритет для курса в эти дни.

Если Вы хотите стать действительно умными, можно настроить rsync, использующий Ключи SSH, и Вы не должны будете даже вводить пароль. Однако это ни в коем случае не необходимо.

Другая конфигурационная информация

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

2
ответ дан 4 December 2019 в 15:26
поделиться

Я рекомендовал бы Capistrano, который является обобщенным инструментом развертывания от мира направляющих. Это в основном разработано с нуля для управления развертыванием. Вот домашняя страница Capistrano:

http://capify.org/

и вот несколько сайтов, показывающих, как другие используют Capistrano для развертывания PHP:

http://www.simplisticcomplexity.com/2006/08/16/automated-php-deployment-with-capistrano/

http://donc.wordpress.com/2006/10/29/deploying-php-with-capistrano/

Примечание: необходимо будет писать/настраивать сценарий развертывания, но Capistrano должен позволить Вам сделать то, в чем Вы нуждаетесь.

0
ответ дан 4 December 2019 в 15:26
поделиться

Не уверенный, если это идеально, но например в моей конфигурации входа в систему DB, у меня есть он, обнаруживают то, что размещает код, работает (просто частичный надрез ниже):

$active_group = "default";
if($_SERVER['SERVER_NAME'] == 'argent.local' || 
   $_SERVER['SERVER_NAME'] == 'beta.website.com') 
   $active_group = "development";

$db['default']['hostname'] = "localhost";
$db['default']['username'] = "username";
$db['default']['password'] = "password";
$db['default']['database'] = "dbname";
$db['default']['dbdriver'] = "mysql";

$db['development']['hostname'] = "localhost";
$db['development']['username'] = "username_dev";
$db['development']['password'] = "password_dev";
$db['development']['database'] = "dbname_dev";
$db['development']['dbdriver'] = "mysql";

(argent.local здесь являющийся моим локальным dev полем) я делаю это несколько других мест также, как в основном классе, который я позволяю/запрещаю выводу ошибок PHP в зависимости от того, если сервер является производством или локальным dev (так как вывод ошибок очень полезен во время dev, но я никогда не хочу, который произвел в производстве):

if($_SERVER['SERVER_NAME'] == 'argent.local' || 
   $_SERVER['SERVER_NAME'] == 'beta.website.com') 
    error_reporting(E_ALL);
    else error_reporting(0);

Таким образом, код, я зарегистрировался в SVN, будет работать и над живыми и над dev полями, не имея необходимость отслеживать, которых можно развернуться где. Таким образом, я могу вытереть все существующие файлы и просто повторно развернуться новый, не имея необходимость волноваться о перемещении любых файлов.

1
ответ дан 4 December 2019 в 15:26
поделиться

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

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

1
ответ дан 4 December 2019 в 15:26
поделиться

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

.
1
ответ дан 4 December 2019 в 15:26
поделиться
Другие вопросы по тегам:

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