You want Ruby? We can do it! Hire us for Ruby on Rails, CoffeeScript, BackBone.js, MongoDb, _underscore.js,dojo,Extjs,jQuery,Node.js,LAMP, AJAX info {at} rubyassist {dot} com
Friday, October 10, 2008
Ruby on Rails applications with Mongrel cluster and Apache url rewriting on Windows
What you will need to do is to manually create n mongrel services for the n clusters you will need.
Visit this link . you will find windows mongrel configuration as well as ubuntu tooo
Nice article and simple tooo
Ruby on Rails applications with Mongrel cluster and Apache url rewriting on Windows
mongrel not running on windows
C:/ruby/lib/ruby/site_ruby/1.8/rubygems/custom_require.rb:27:in `gem_original_require': no such file to load -- C:/ruby/lib/ruby/gems/ 1.8/gems/mongrel-1.1.2-x86-mswin32/lib/mongrel/init.rb (MissingSourceFile) I did 'gem update mongrel' and it said : Successfully installed mongrel-1.1.5-x86-mswin32-60 I noticed the version of the one installed is later than the one in the mongrel error message. Is there an older version of something that is causing this?
I solved this by the following way
by changing the name of your folder C:/ruby/lib/ruby/gems/1.8/gems/mongrel-1.1.5-x86-mswin32-60 to C:/ruby/lib/ruby/gems/1.8/gems/mongrel-1.1.2-x86-mswin32
and it should work as usual
How to build Ruby On Rails projects using Hudson part -2
Installation
CI::Reporter is available as a gem. To install the gem, use the usual gem command:
gem install ci_reporter
To use CI::Reporter as a Rails plugin, first install the gem, and then install the plugin as follows:
script/plugin install http://svn.caldersphere.net/svn/main/plugins/ci_reporter
Usage
CI::Reporter works best with projects that use a Rakefile along with the standard Rake::TestTask or Spec::Rake::SpecTask tasks for running tests or examples, respectively. In this fashion, it hooks into Test::Unit or RSpec using environment variables recognized by these custom tasks to inject the CI::Reporter code into the test or spec runs. If you‘re using the Rails plugin, step 1 is unnecessary; skip to step 2.
- To use CI::Reporter, simply add the following lines to your Rakefile:
require 'rubygems'
gem 'ci_reporter'
require 'ci/reporter/rake/rspec' # use this if you're using RSpec
require 'ci/reporter/rake/test_unit' # use this if you're using Test::Unit - Next, either modify your Rakefile to make the ci:setup:rspec or ci:setup:testunit task a dependency of your test tasks, or include them on the Rake command-line before the name of the task that runs the tests or specs.
rake ci:setup:testunit test
Report files are written, by default, to the test/reports or spec/reports subdirectory of your project. If you wish to customize the location, simply set the environment variable CI_REPORTS (either in the environment, on the Rake command line, or in your Rakefile) to the location where they should go.
Source
You can get the CI::Reporter source using Git, in any of the following ways:
git clone git://git.caldersphere.net/ci_reporter.git
git clone http://git.caldersphere.net/ci_reporter.git
git clone git://github.com/nicksieger/ci_reporter.git
How to build Ruby On Rails projects using Hudson
In this guide I'm going to show how to set up a Ruby on Rails project on the Continuous integration server Hudson. I've been using Hudson on Ruby on Rails projects since september and it works really well.
Initial downloads
The following files are needed besides Java (at least 1.5). Get the latest version of all files and notice that the Hudson file has the extension .war and plugins .hpi. This guide assumes that Ruby, Rake and Svnplugin are already installed and working.
* Hudson server application
* Ruby plugin
* Rake
Installation steps
I'm going to install Hudson into c:\Program Files\Hudson.
- Copy the hudson.war file to c:\Program Files\Hudson
- Start Hudson through "java -DHUDSON_HOME=data -jar hudson.war". Verify that you can access Hudson through http://localhost:8080
- Copy the plugins to c:\Program Files\Hudson\data\plugins
- Stop Hudson by pressing Ctrl+C in the command prompt where you started Hudson.
- Start Hudson again and you should be set to go.
Follow the following steps to configure the tools that Hudson will use in building Your project.
- Go to the System configuration at http://localhost:8080/configure.
- Click the "New job" link at the home page.
- Enter the name "Your project", check the "Build a free-style software project" and press OK.

Source code management
Assumes thata ur project uses a Subversion SCM. Hudson supports CVS and SVN out of the box, but there are many plugins for other SCMs. After checking out the files from the repository Hudson will show the new change sets since the previous build in the Build page. A detailed view of change sets can be seen in the Changes page as the name of the developer, files that were changed and the comment for the change. Each change set is linked to the subversion repository browser, so it is easy to browse the actual file that changed.
- Press the Subversion radio button to configure the SCM.
- Repository URL=https://xxx.svn.sourceforge.net/svnroot/xxx/trunk/xxx
- Local module directory=.
- Press the Advanced button
- Repository Browser=ViewSVN, URL=http://xxx.svn.sourceforge.net/viewvc/xxx/

To test the configuration, press Save and then Build. The source code will be downloaded from the repository and put into the Workspace. If there were any changes in the SCM repository they can be viewed in the Changes page.

When the build is completed verify that it has checked out the code by going to the Workspace page. Using the Workspace page you can browse and view the files that has been checked out and it doesn't matter if the files are on the master or on a distributed slave!
When the plugin is avalable it detects your ruby instances installed from your PATH but it allows you to add other ruby or jruby paths:
Finally you just need to select the Invoke Rake option into the project configuration and select the tasks that you want to Hudson executes:
That's it, you are ready to go with Rake, Hudson and the Continuous Integration Game.
Tuesday, August 26, 2008
RESTful Rails in Short
coined by Roy Fielding stands for REpresentational State Transfer
describes an architecture for web apps centered around resources
REST constraints
- client-server
- stateless
- cache
- uniform interface
- layered system
- code-on-demand
REST data elements
- resource
- resource identifier
- representation
- representation metadata
- resource metadata
- control data
Rails resource
- manipulated via HTTP methods
- URL addressable entity
- represented in different formats
operation SQL REST
create insert POST
read select GET
update update PUT
delete delete DELETE
Rails resource URLs
Traditional Rails RESTful Rails
POST /post/create POST /post
GET /post/show/1 GET /post/1
POST /post/update/1 PUT /post/1
POST /post/destroy/1 DELETE /post/1
Creating a resource
./script/generate scaffold_resource \
post \
title:string \
content:text \
created_at:datetime
creates
model, views, controller, helper
fixtures, unit tests, functional tests,
migration (fully functional!)
modifies
config/routes.rb
Model
app/models/post.rb
class Post < ActiveRecord::Base
end
nothing new!
View
app/views/posts/show.rhtml
Title:<%=h @post.title %>
Content:<%=h @post.content %>
Created at:<%=h @post.created_at %>
<%= link_to ‘Edit’, edit_post_path(@post) %> |
<%= link_to ‘Back’, posts_path %>
new syntax for link_to URLs!
Views: routes
config/routes.rb
ActionController::Routing::Routes.draw do |map|
map.resources :posts
end
defines path methods and URL methods
Action `````HTTP request````````` Path method
index GET /posts projects_path
show GET /posts/1 project_path(1)
new GET /posts/new new_project_path
edit GET /posts/1;edit edit_project_path(1)
create POST /posts projects_path
update PUT /posts/1 project_path(1)
delete DELETE /posts/1 project_path(1)
new
form_for(:post, :url => post_path) ...
edit
form_for(:post, :url => post_path(@post), \
:html => {:method => :put}) ...
destroy
link_to ‘Destroy’, post_path(post), :method => :delete
Controller
app/controllers/posts_controller.rb
def destroy
@post = Post.find(params[:id])
@post.destroy
respond_to do |format|
format.html { redirect_to posts_url }
format.xml { head :ok }
end
end
uses respond_to and post_url
Controller: routes
Traditional Rails
redirect_to :controller => ‘posts’, \
:action => ‘show’, :id => @post.id
RESTful Rails
redirect_to post_url(@post)
Each path method has equivalent URL method
Remember: use URL methods for redirect_to
Controller: respond_to
multiple representations of the resource
respond_to uses
accept HTTP-Header of the request
format appended to the request URL
register new formats in config/environment.rb
to extend responds_to
Mime::Type.register ‘image/png’, :png
Migration
db/migrate/001_create_posts.rb
class CreatePosts < ActiveRecord::Migration
def self.up
create_table :posts do |t|
t.column :title, :string
t.column :content, :text
t.column :created_at, :datetime
end
end
def self.down
drop_table :posts
end
end
Nested resources
strongly coupled resources
expressed in the URLs
creating a nested resource
./script/generate scaffold_resource comment \
post_id:integer created_at:datetime \
author:string content:text
models
models must be edited to express relationship
app/models/post.rb
class Post < ActiveRecord::Base
has_many :comments
end
app/models/comment.rb
class Comment < ActiveRecord::Base
belongs_to :post
end
routes
routes must be edited to reflect relationship
config/routes.rb
map.resources :comments
becomes
map.resources :posts do |posts|
posts.resources :comments
end
Path method Path
comments_path(1) /posts/1/comments
comment_path(1, 2) /posts/1/comments/2
new_comment_path(1) /posts/1/comments/new
edit_comment_path(1) /posts/1/comments/2;edit
controller
nested resources controllers must be adapted
def index
post = Post.find(params[:post_id])
@comments = post.comments.find(:all)
...
end
REST benefits
- clean URLS
- multiple representations
- less code
- CRUD oriented controllers
- clear application design
- scalability
Friday, August 22, 2008
SQL Injection in Ruby On Rails
One of the most common security holes in web applications is that they pass user input
directly to the database without quoting. Thus, a malicious user can fairly easily run all the SQL
he wants to on the server. An example of this would be a search form submission that is handled
by the following code:
@courses = Course.find(:conditions => "name = '#{params[:q]'")
Now let’s say JHON puts the following string into the search form:
"science'; delete from courses; --"
The resulting SQL query will be as follows:
SELECT * from courses where name = 'science'; delete from courses; --'
This is a perfectly valid SQL query and will effectively wipe out the whole courses table. Thus,
you should never, ever, pass anything unquoted to the :conditions parameter of ActiveRecord
finders. Instead, use the bind variable syntax:
@courses = Course.find(:conditions => ["name = ?", params[:q]])
You can pass in as many question mark/variable pairs you need. They will be parsed and
quoted in the order they are specified.
Another option in simple cases is to use the magic finders, where the parameter value is
automatically quoted, too:
@courses = Course.find_by_name(params[:q])
Tuesday, August 19, 2008
Dojo Button and Rails Helpers
When i tried to use dojo buttons on rails partials , i felt happy about dojo widgets.
But if i have to use save_tag button or i want to include button in link_to_remote function,
I dont have option to get dojo style button.
I have used firebug to get the required dojo classes for dojo button and created following helper methods.
def dojo_button(name)
''
end
def dojo_button_class
"dijit dijitLeft dijitInline dijitStretch dijitButtonNode dijitButtonContents dijitButton"
end