[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
Re: What is the true use ?
Re: What is the true use ?
Thu, 22 Nov 2001 11:38:23 -0600
At 10:07 AM 11/22/2001 +0000, Michael L. Hostbaek wrote:
A buddy of mine, and I are having a somewhat loud discussion, as to how
we are using cvs on our server.
We want to put our www docroot in cvs.
How is this done in the real world ? I think, my way of doing is the
correct way, but I do still have some issues, that are hard to explain..
When comitting, you have to export and copy every time - which can be a
And if you are working on a local copy in your homedir, how do you test
to see if it works, before comitting ? (Let's say you setup and test
env, but some dynamic pages depends on other things with absolute paths.
Ok, I'm far from the expert on CVS, having only been using it for a few
weeks, but I'm going to take a crack at this one. :)
I am a beginning PHP/MySQL developer. I have a production site that has
about 4-5 web "applications" running on it. I have an inventory/asset
management system, a documentation archive, and a few other things. I used
to do all of my development in the production area, which was rather silly,
I know, but workable at first because not many people actually used my
sites for anything. Once they started becoming more popular I realized
that something was going to have to change and that I couldn't confine my
development time to 10 PM or later to make sure no one was accessing my site.
By this time I had already heard of CVS so I decided to investigate it. I
spent some time studying and reading the manual, and this is the setup I
ended up with:
I actually have TWO development servers that I work off of. At work, I
have the main production server and one development server. At home, on my
home network, I have another development server (of course, one of the
great advantages of Linux/PHP/MySQL is that there are no licensing issues
to worry about so you can have as many development servers as you like).
I created a CVS repository on my production machine (just because this
machine is backed up to tape every night...I could have easily put the CVS
repository on any computer I wished) and checked in my 4-5 different web
apps as separate modules. I backed up my current ./htdocs directory, then
dumped it, then did a CVS checkout from the repository directly into the
production ./htdocs (or wwwroot, as the case may be). Next I held my
breath and tested everything to make sure it still worked, and it did.
Next, I set up my two development servers to mimic the configuration of the
production server as closely as possible. I created development branches
for each of my modules (with a DEVEL tag) and checked out the DEVEL
branches into my development servers. Of course I also had to export the
MySQL databases from my production machine and import them into the
I do not version control the databases, BUT, if I ever need to make a
change to the database structure (add tables, drop tables, add keys, etc.)
then I go ahead and make the change to development, then create a SQL patch
file that will perform these same changes. I put that SQL patch file into
my current working directory and "cvs add" it. As work continues and I
make more changes, I update this patch file and it is included on each
commit back to the repository.
As I work on the development server at work, I'm making changes to the
checked out copy of the DEVEL branch. When I'm finished, I commit my
changes back into the repository. Now, when I get home if I decide I'm not
sick of working yet, I'll go to my home development server and "cvs update"
to get my latest changes.
When I'm ready to merge these changes back into production, I will merge
the DEVEL changes back into the main trunk, then go to my production server
and "cvs update" to get the new changes. Next I will have to run the SQL
patches to bring the databases up to date (part of the "build" process) and
then theoretically if everything goes well, I should be good. :)
But, to answer your question, your method is much preferred over what your
friend is suggesting, IMHO. Now, the best approach IMHO is to have a
completely separate machine so you can mimic your production environment,
absolute paths and all. If you can't afford to do that, you will have a
little extra work on your hands. I'm sure I don't have to tell you this,
but absolute hard coded path's should be avoided wherever possible because
of issues like these. For example, in PHP I always use the built in server
vars such as $HTTP_SERVER_VARS["document_root"] and relative paths on all
my links and references, that way I can move things around fairly easily
without it breaking. Of course, sometimes this is easier said than done.
Maybe someone else will have some other ideas, but it seems to me that you
have two options:
1. Setup a seperate devel server and mimic the configuration of your
2. Edit/update your code to remove references to absolute paths wherever
Here's a good link I found explaining how to use CVS in a web development
environment. The author uses Oracle as the database server, but the
article is general and easily applies to almost any development environment:
Hope this was of some help. I know some of this might not have been very
clear, so if you have questions, feel free to ask. :)
Re: What is the true use ?, Michael L. Hostbaek, 2001/11/23
RE: What is the true use ?, Jerry Nairn, 2001/11/26
Re: What is the true use ?, Damian Wiest, 2001/11/26