After doing a couple of Rails projects I found myself doing the same setup for each project. On top of the template project I wanted user authentication support with mail activation. Whenever it was time to implement a new project I didn’t quite remember the exact process and ended up spending too much time searching for how-to-articles. This article is a summary of the steps required to create a project with support for user authentication based on restful_authentication.
To be able to implement this you will need to have a sufficiently new installation of Rails. I am using 2.1.1 but it may work on later or earlier versions. In addition, you will need to have support for git since the restful_authentication plugin has moved to a git repository.
The name “myproject” should be replaced with whatever project name you want to use.
Create project folder
$ rails myproject
$ cd myproject
Create databases
Based on where you plan to host the site, this should be done for all three databases: myproject_production, myproject_development and myproject_test. You may skip this step if you want to use the built-in sqlite3 support.
$ mysql -u root
>create database myproject_development character set utf8;
Update database settings in Rails (config/database.yml):
development:
adapter: mysql
socket: /tmp/mysql.sock
database: myproject_development
username: rails
password: rails
encoding: utf8
timeout: 5000
Add similar lines for the other two databases. You must also setup an account in the MySQL server that has full permissions on the database(s).
Download the restful_authentication plugin
Change the name from using a dash to an underscore to avoid a potential error.
$ git clone git://github.com/technoweenie/restful-authentication.git vendor/plugins/restful_authentication
Install acts_as_state_machine
$ script/plugin install http://elitists.textdriven.com/svn/plugins/acts_as_state_machine/trunk/
Generate authentication scaffolding
Include –stateful flag to make restful_authentication use the acts_as_state_machine plugin.
$ script/generate authenticated user sessions --stateful
Add a route for the activation
In file: config/routes.rb
map.activate '/activate/:activation_code', :controller => 'users', :action => 'activate', :activation_code => nil
Add an observer
In file: config/environment.rb
config.active_record.observers = :user_observer
Create a home page controller
$ script/generate controller site index
Add a root route
In file: config/routes.rb
map.root :controller => "site", :view => "index"
Add visual notification
Create application.html.erb and add display code for notifications and error messages.
In file: app/views/layouts/application.html.erb
<%= flash[:notice] %>
<%= flash[:error] %>
<%= yield %>
Add webmaster email and site URL
In file: config/environment.rb
ADMIN_EMAIL = "postmaster@myproject.com"
In file: config/environments/development.rb
SITE_URL = "localhost:3000"
In file: config/environments/test.rb
SITE_URL = "localhost:3000"
In file: config/environments/production.rb
SITE_URL = "www.myproject.com"
Update template mailer code
In file: app/models/user_mailer.rb
Change “ADMINEMAIL” to “#{ADMIN_EMAIL}” (1 occurance). Change “YOURSITE” to “#{SITE_URL}” (3 occurances).
Add a mail initialiser by creating the file /config/initializers/mail.rb and add:
ActionMailer::Base.delivery_method = :sendmail
ActionMailer::Base.sendmail_settings = {
:location => '/usr/sbin/sendmail',
:arguments => '-i -t -f postmaster@myproject.com'
}
Additional items:
- Add more fields to the user model (first and last name etc).
- Include AuthenticatedSystem in application.rb instead of every controller.
- Add before_filter :login_required to controllers that should require a logged in user.
Final steps
Finally, migrate the database and remove the default homepage
$ rake db:migrate
$ rm public/index.html
One reply on “Rails boilerplate project”
http://www.message_outrdommonri.com/