I haven’t updated my learnings for a while and that’s coz I got stuck with my Todo App when I was trying to associate Users with each of their Task List and restrict the view for other users. So, I went back to the basics and followed through an awesome Rails Tutorial, which taught me a lot of things and I hope to share them right here!
Rails Resources
I followed through Rails Tutorial (updated author codes are here). This was frankly my 4th attempt to follow through this tutorial. Each time however, I found myself doing it faster with more understanding. Did I understand 100% of the tutorial now? Nope - probably 60%. But did I learn more? Absolutely! Here’s my completed codes and the app in Heroku to play with!
I would like to list some of the other resources that I will be following through to keep up my learning:
A playful discipline
To start off, here’s my Gemfile that I used:
source 'http://rubygems.org'
gem 'rails', '3.0.7'
gem 'sqlite3-ruby', '1.3.2', :require => 'sqlite3'
gem 'gravatar\_image\_tag'
gem 'will\_paginate', '3.0.pre2'
group :development do
gem 'rspec-rails', '2.6.0'
gem 'annotate-models', '1.0.4'
gem 'faker', '0.3.1'
end
group :test do
gem 'rspec-rails', '2.6.0'
gem 'webrat', '0.7.1'
gem 'spork', '0.9.0.rc5'
gem 'factory\_girl\_rails', '1.0'
gem 'faker', '0.3.1'
end
I realised that it’s not just about coding, but it employs 3 main peripherals that are highly integrated as well:
- Versioning of codes using GIT
- Storing the codes in a remote git repository: For open source codes, I use the free account for GitHub. For closed source, there are other free options as well
- Testing with test cases - I have been using RSpec with Spork and Autotest. I heard a lot about Cucumber as well!
- Deployment to an external server: I use Heroku, but there are also others like Rails Playground
Coding in Chunks!
At the start of any brand new app, the following commands in the Terminal:
$ rails new todo-app #Save the entire folder called todo-app as a TextMate project
$ cd todo-app
$ git mv README README.markdown #Edit readme file and rename to use markdown syntax
$ bundle install #To install gems needed
$ rake db:create
$ rails generate rspec:install #will install the spec folder for testing - delete the test folder
$ rails server #View app in browser via http://localhost:3000
$ tail -f log/development.log #See SQL Injections
$ spork #Start the test server
$ autotest #With Growl notifications, it'll automatically display the test results
$ git init #initialise git
$ git add .
$ git commit -m "Initial Commit"
$ git remote add origin [email protected]:username/app-name.git #Url from my new GitHub Repository
$ git push -u origin master # pushes the "master" branch to "origin" remote and sets up tracking
$ heroku create app-name
$ git push heroku master
$ heroku rake db:migrate
$ heroku db:push
$ heroku open # To view the app in the heroku domain in the browser: http://app-name.heroku.com
# Play with the app in Heroku just to make sure it's working!
At the start of each coding section/feature subsequently, here’s my list of things I run through the command line in Terminal after I navigate to the app folder and open my TextMate project:
$ rails server
$ tail -f log/development.log
$ spork
$ autotest
$ git checkout -b branch-name-with-feature
At the end of each coding, here’s my list of “tasks”:
$ rspec spec/ #Ensure all tests are passing
$ git add .
$ git commit -m "Changes Made"
$ git checkout master
$ git merge branch-name
$ rspec spec/ #Just to ensure again all tests are passing after the merge
$ git push #codes to github
$ git push heroku #deploy to heroku
$ heroku rake db:migrate #update db
$ heroku db:push #migrate db data to heroku
Getting Stuck and Debugging
So, what do you do when you get stuck and REDS appear in the testing?
- Run the test and locate the failures
- Google the error codes - in 80% of the time I will find another person who has gotten the same error!
- Stack Overflow
- Github sharing (Many Rails Gems are also listed here)
- Search for a tutorial related to the failure/feature matter
- Yes, take a break for a day and come back to it again! Repeat Steps (1) to (5)
- Bug a friend – didn’t have to resort to this as yet!
Caution
There’ll be false sense of “doing” when just going through the tutorials - so, get to building something along in the side! Can’t say it well-enough than Feynman and have fun :) Will blog soon! Did I miss any of the fundamentals to starting a Rails app?
**Next Objective: **
Pick up Agile Web Development (Rails 3) and get back to Todo App - each user can create his own task list.
“What I cannot create, I do not understand.” — Richard P. Feynman