A helpful collection of Rake tasks for improved workflows.
# Add Gemcutter to your RubyGems sources $ gem sources -a http://gemcutter.com $ (sudo)? gem install kematzy-tasks
This Gem depends upon the following:
rake ( >= 0.8.7 )
Development & Tests:
rspec (>= 1.2.7 )
These tasks are available:
DB => Database Related Tasks
NB! These tasks are only supporting SQLite3 databases with name ending in .db for now.
To setup the ../db/ directories used by these Rake tasks.
rake db:setup => creates ../db/bootstraps & ../db/backups in the Rakefile directory.
DB => BACKUPS
To backup a database [db] and compresses it as a YYYY-MM-DD-[db].tar.gz file.
rake db:backup:db db=/name-of-database.db => ../db/backups/YYYY-MM-DD-name-of-database.db.tar.gz alias: rake db:backup db=/name-of-database.db
To dump (backup) ALL databases into .sql files.
rake db:dump => # creates ../db/backups/YYYYMMDD-HHMMSS-development.db.sql # with the following comments in the sql file # -- ++++ -- BACKUP OF DB [ development.db ] -- IN APP [ /full/path/2/your/app ] -- Created on [ YYYY-MM-DD at HH:MM:SS ] -- -- /++++ alias: rake db:backups rake db:backup:sql
DB => BOOTSTRAPS
To dump all current databases as bootstrap .sql files.
To bootstrap an existing database with its ..db/bootstraps/*.sql file.
rake db:bootstrap db=db/development.db => # is equivalent to this: `sqlite3 db/development.db < db/bootstraps/development.db.sql`
To bootstrap a NEW database with a ..db/bootstraps/*.sql file.
rake db:bootstrap:new db=db/new.db bf=db/bootstraps/somefile.sql # creates the new DB ../db/new.db # and loads the contents of ../db/bootstraps/somefile.sql into it
DB => EXTRAS
To copy the ../db/development.db into ..db/production.db.
rake db:production:setup =>
FS => File System Related Tasks
Commonly used file system related tasks.
NB! Use these with care, as they might NOT be 100% solid at this stage.
FS => COPY
To copy files or directories from one location to another.
# copies the file to the directory rake fs:copy from=path/from/filename.ext to=path/to/some/directory # copies the contents of the from directory to the to directory rake fs:copy from=path/from/directory/ to=path/to/some/directory # copies the whole directory to the new path rake fs:copy from=path/from/directory to=path/to/some/new/path
FS => MOVE
To move files or directories from one location to another.
# moves the file to the directory rake fs:move from=path/from/filename.ext to=path/to/some/directory # moves the contents of the from directory to the to directory rake fs:move from=path/from/directory/ to=path/to/some/directory # moves the whole directory to the new path rake fs:move from=path/from/directory to=path/to/some/new/path
FS => CREATE
To create a NEW directory at the path given.
rake fs:create:dir:new path=path/2/new/dir
Other Create Tasks (more specific to my workflow perhaps)
To create a Classes directory at the path given.
rake fs:create:dir:classes path=path/2/dir => # results in ../path/2/dir/classes being created
To create a Helpers directory at the path given.
rake fs:create:dir:helpers path=path/2/dir => # results in ../path/2/dir/helpers being created
To create a Models directory at the path given.
rake fs:create:dir:models path=path/2/dir => # results in ../path/2/dir/models being created
To create a Routes directory at the path given.
rake fs:create:dir:routes path=path/2/dir => # results in ../path/2/dir/routes being created
PASSENGER => Passenger / mod_rails Related Tasks
To restart the server, and create the ../tmp/restart.txt file (if missing)
rake passenger:init => touch tmp/restart.txt alias: rake passenger:restart rake psr
To turn on “Always Restart Passenger” on each request.
rake passenger:always:on => touch tmp/always_restart.txt alias: rake pson
To turn OFF “Always Restart Passenger” on each request.
rake passenger:always:off => rm tmp/always_restart.txt alias: rake psoff
SYMLINK => Symlink Related Tasks
When developing sites, I keep certain directories out of Git versioning, and instead store them in a 'shared' directory one level up from my app.
I then symlink the directories into the ../APP_ROOT/public/ directory.
To symlink all shared directories to public/.
rake symlink:shared dirs=images, photos, downloads,.... => # equivalent of: `ln -s ../APP_ROOT/shared/downloads ../APP_ROOT/public/downloads and so on...
SASS => Sass Related Tasks
This is a very personal workflow task, whereby I essentially have this Sinatra App structure.
APP_ROOT | |-> config.ru | |-> apps | | | |-> app1 | | | | | |-> sass | | | | | | | |_> _pages.sass # | | | | | | | |-> pages | | | | | | | | | |-> home.sass | | | | |-> login.sass | | | | |-> .... | | | | | | | | | | | |-> app2 | | | |-> ....
Create a NEW Sass page and include it in the _pages.sass file for loading.
rake sass:page:new page=app1:logout => # creates the ../apps/app1/sass/pages/logout.sass page and includes it in the _pages.sass file
Make it less personal perhaps.
Make the DB Tasks work with both MySQL and SQLite3 databases.
Work out how to test all these tasks via RSpec tests, for more solid tasks.
Note on Patches/Pull Requests
Fork the project.
Make your feature addition or bug fix.
Add tests for it. This is important so I don't break it in a future version unintentionally.
Commit, do not mess with rakefile, version, or history.
(if you want to have your own version, that is fine but bump version in a commit by itself I can ignore when I pull)
Send me a pull request. Bonus points for topic branches.
Copyright © 2009 kematzy. See LICENSE for details.