For this article i explain how i deployed my Rails app (this blog) to a SVN repository hosted on my ASmallOrange.com account
Create SVN Repo by asmallorange (ASO) + websvn and import your project
Before to be able to connect to your SVN repo by svn+ssh protocol from your local machine:
Generate locally a ssh key pair by
$ ssh-keygen -t dsa (without passphrase to connect without password)
Puts the public key to your ASO account :
$ sftp {username}@{remote-host}:/home/{username}
$ put /Users/{username}/.ssh/id*.pub
$ bye
Reconnect by ssh to your account :
$ ssh {username}@{domain}
$ mkdir .ssh
$ cd .ssh
$ cat ../id*.pub >> authorized_keys2
$ chmod 700 authorized_keys2
Disconnect , then reconnect via SSH:
your password is not prompted…that does it!
Initial import of your current project, developed locally , to your SVN repo.
For the first import, we”ll zip the local project, then push it to the ASO account.
$ tar cvfz {projectname}.tar.gz /path/to/project
$ scp {projectname}.tar.gz {username}@{domain}:/home/{username}
$ ssh {username}@{domain}
Connect by ssh to your account (eg. ssh {username}@{domain})
This installation is made for a single project in your repository : your Rails app root folder should be named {projectname}
$ mkdir ~/svn
$ svnadmin create –fs-type fsfs svn/{projectname}
$ export REPOS=file:///home/{username}/svn/{projectname}
$ svn mkdir –message=”Initial project layout” $REPOS/trunk $REPOS/tags
$REPOS/branches
Committed revision 1.
Move your project
$ mkdir ~/tmpdir
$ cd tmpdir
$ mv ~/{projectname}.tar.gz .
$ tar xzvf {projectname}.tar.gz
$ rm *.tar.gz
$ cd {projectname}
$ svn co $REPOS/trunk .
Checked out revision 1.
$ svn add –force .
This is called an ”In Place Import” . A whole import could have been done too.
Before commit , we”re going to do some operations. Thus to ignore log files first :
$ svn revert log/*
Reverted ”log/development.log”
Reverted ”log/fastcgi.crash.log”
Reverted ”log/lighttpd.access.log”
Reverted ”log/lighttpd.error.log”
Reverted ”log/production.log”
Reverted ”log/server.log”
Reverted ”log/test.log”
$ svn propset svn:ignore “*.log” log\r\nproperty ‘’svn:ignore” set on ”log”
$ svn revert config/database.yml
Reverted ”config/database.yml”
$ mv database.yml database.yml.template
$ svn add database.yml.template
$ svn propset svn:ignore “database.yml” config
$ cp database.yml database.yml.template database.yml\r\n
Ignore db/schema.rb, tmp/* , doc, script, public
$ svn propset svn:ignore “schema.rb” config
$ svn propset svn:ignore “*” tmp
$ svn propset svn:ignore “*doc” doc\r\n
Flag as executables script/* and public/dispatch.*
$ svn propset svn:executable “*” `find script -type f | grep -v ”.svn”` public/dispatch.*
Finally, revert and remove index.html (we”ll do a route for the application)
$ svn revert public/index.html
$ rm public/index.html\r\n
Commit :
$ svn commit –message=”New {projectname} project”
…
Adding vendor/plugins/
Transmitting file data
…………………………
Committed revision 2.\r\n
Install WebSVN to have remote access from an internet browser:\r\n
$ svn co http://wedsvn.tigris.org/svn/websvn/trunk www/websvn –username guest
Authentication realm: CollabNet SCM Repository
Password for ”guest”: guest
…
Modify the config file :
$ cd www/websvn
$ cp include/distconfig.inc include/config.inc
$ vi include/config.inc\r\n
// Uncomment the next line if you”re running PHP 4//
$config->setPHPCompatEnabled();
// Uncomment and edit this line:
$config->addRepository(”My Projects”, “file:///home//svn/”);
That should do it. Test with FF (eg : http:///websvn)
You should see your project
On Mac you should install SVN first (http://subversion.tigris.org/project_packages.html) then svnX (http://www.lachoseinteractive.net/fr/communaute/subversion/svnx/telecharger/)
Move your locally developed rails project :
$ cd /path/to/my/rails/projects
$ mv {projectname} {projectname}.orig
From SVNX , configure your Repositories (no login/password will be required, thanks to your ssh public key copied into your account):
Name : My ASO repo
Path : svn+ssh://{username}@{domain or ip}/home/{username}/svn/{projectname}
Click SVN Checkout
Folder to your working copy is asked :\r\n/path/to/rails/projects/{projectname}
That’’s it .
Open /path/to/rails/projects/{projectname} in your IDE (TextMate, RadRails, Eclipse+RDT)
In RadRails create a new repository Location with the following path:\r\nsvn+ssh://{username}@{domain or ip}/home/{username}/svn/{projectname}
Ressource:
http://blog.teksol.info/articles/2006/03/09/subversion-primer-for-rails-projects
Tags: rails svn deployment