Продвижение PHP от разработки к производству

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

1.) Как я могу обеспечить синхронизацию моей локальной и действующей базы данных MySQL? Я вручную создавал базу данных локально, а затем использовал тот же код и применял его к моему живому серверу. (У меня есть phpmyadmin локально и на живом сервере, но я не знаю, как его использовать для оптимизации этого процесса)

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


person user1613223    schedule 17.10.2012    source источник


Ответы (7)


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

Для вопроса 2 довольно часто сведения о подключении к базе данных помещаются в отдельный файл php, а затем включают этот файл вверху каждой страницы, которая должна подключаться к базе данных.

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

db.php

<?php
$dbuser="";
$dbpass="";
$dbname="";
$dbserver="";
?>

myfile.php

<?php
include("db.php");
$conn = mysql_connect($dbserver, $dbuser, $dbpass);
mysql_select_db($dbname);
//....
?>
person case1352    schedule 17.10.2012
comment
Если вы сбросите базу данных при разработке и импорте в продакшн, вы потеряете все производственные данные. Не думаю, что тебе это нужно. Я бы НИКОГДА не копировал базу данных разработчиков с производственной базой данных. Причина очевидна. - person Al_; 18.10.2012
comment
да, в этом есть смысл. но может быть сценарий, в котором данные разработчика являются настоящими данными. Редкий сценарий, конечно, но не полностью в области фантастики. - person case1352; 18.10.2012
comment
не загружайте db.php. также сделайте db.php на сервере только для чтения, чтобы, если вы по ошибке загрузите файл, он не будет перезаписан. - person bansi; 25.09.2014

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

$link = mysql_connect('<your ip here>', 'mysql_user', 'mysql_password');
person phpisuber01    schedule 17.10.2012

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

У меня есть базовый файл, в котором я указываю свою среду следующим образом:

$env = 'dev'

Затем в переменных настройки моей базы данных у меня есть что-то вроде этого:

if($env == 'dev') {
    specify dev variables
} else if($env == 'prod') {
    specify prod variables
}

Прелесть этого в том, что когда я хочу переключаться между dev и prod, мне нужно изменить только 1 переменную.

person Catfish    schedule 17.10.2012
comment
Другой вариант - константа. - person Ofir Baruch; 18.10.2012
comment
Мне нравится этот метод. Спасибо, что поделился - person user1613223; 18.10.2012
comment
Это более эффективно, чем сравнение имени хоста и других параметров. Я хотел бы включить этот файл в свой глобальный файл (пример config.php), который я вызываю в заголовке всех моих файлов сценариев, и меняю эту переменную на константу, чтобы она была доступна глобально внутри классов и функций. - person parse; 16.12.2018

Используйте систему контроля версий, такую ​​как svn или git; посмотрите phpmig для управления базой данных, посмотрите на инструменты развертывания, такие как capistrano, убедитесь, что вы тестируете реплику производственного сервера (даже если вы просто используете виртуальный хост)

person Mark Baker    schedule 17.10.2012
comment
Разве капистрано не только для рельсов? - person Catfish; 18.10.2012
comment
@Catfish - capistrano написан на Ruby, но его использование не ограничивается приложениями Ruby ... Я использую его для приложений PHP без каких-либо трудностей, потому что ему все равно, на каких языках код он копирует или извлекает из VCS. написано в - person Mark Baker; 18.10.2012

Я почти нахожусь в том же положении, что и вы, и вот как я планирую это сделать.

  1. Я не планирую синхронизировать свою локальную базу данных с действующей, а просто переместу локальную базу данных один раз в онлайн, когда закончу. Я делаю это просто: в PHPMyAdmin выбираю нужную базу данных и экспортирую ее как файл .sql. Затем на онлайн-сервере я просто импортирую этот файл.

  2. Лучший способ, который я знаю, - это иметь отдельный файл, в котором у вас есть функция, которая выглядит примерно так:

    function connectToDB(){ $mysqli = new mysqli("localhost", "root", "123", "myDatabase"); return $mysqli; }

    Затем, когда вы хотите использовать это, вы просто импортируете файл поверх других файлов PHP и используете его следующим образом:

    $mysqli = connectToDB();

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

person Oskar Persson    schedule 17.10.2012

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

В ответ на ваши вопросы, что бы я сделал:

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

2) Как вы сохраняете пароли, зависит от того, используете ли вы фреймворки или нет. Следуя фреймворкам, это хороший подход - определить переменную среды и установить пароли в соответствии со средой (разработкой или производственной).

Что касается развертывания кода, даже если вы уникальный разработчик, я бы использовал svn или git для сохранения ваших проектов под контролем версий. Это значительно упростит обновление кода и поможет при желании откатиться, если вы создадите теги для каждого развертывания.

person Al_    schedule 17.10.2012

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

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

person Michael    schedule 18.10.2012