Best practice to maintain chef-repo for a single node that hosts multiple rails app


#1

Hi, I went through the Quick Start guide for radiant rails
apphttp://wiki.opscode.com/display/chef/Build+A+Rails+Stack
deployment
at and I did installed it correctly.

The files at data_bags/apps/radiant.json, roles/radiant.rb and
cookbooks/radiantall uses radiant as a base app name.

Now I am trying to create another radiant app (say: another_radiant).
Here I am confused how to go ahead if I have to host another 3rd radiant
app. This seems perfectly to go the Data Driven App
Deployshttp://www.slideshare.net/jtimberman/data-driven-app-deploys-with-chef-frontdev
way.

Looking inside the above rails stack, its name is radiant as cookbook,
databags and roles as well.

So, for the new radiant stack app named another_radiant, do I have to copy
those allradiant components into another_radiant for all cookbook, databag
and roles too?

Or is there any better way so that it will be flexible to maintain across
many servers?

@millisami
~Sachin Sagar Rai
Ruby on Rails Developer
http://tfm.com.np
http://nepalonrails.tumblr.com


#2

You can try the applications cookbook and see if that works for you. I
wasn’t quite right for me so I whipped up something quick and dirty
myself for my rails apps. You can modify it for your own needs.
Everything is driven by the databag.

search(:apps, ‘tags:app_group’) do |app|

app_path = "/home/app_group/#{app[‘name’]}/#{app[‘environment’]}"
app[‘path’] = app_path

%w(bundle cached-copy config log pids system).each do |dir|
directory “#{app_path}/shared/#{dir}” do
owner app[‘user’]
group app[‘group’]
mode "0755"
action :create
recursive true
end
end

template “#{app_path}/shared/config/database.yml” do
source "database.yml.erb"
owner app[‘user’]
group app[‘group’]
mode "0755"
variables(:databases => app[‘databases’].to_hash)
end

deploy app_path do
repo app[‘repository’]
revision app[‘revision’]
user app[‘user’]
enable_submodules true
migrate false
migration_command "bundle exec rake db:migrate"
environment app[‘environment’]
shallow_clone true
symlink_before_migrate “config/database.yml” => "config/database.yml"
purge_before_symlink %w{log tmp/pids public/system config/database.yml}
create_dirs_before_symlink %w{tmp public config}
action :deploy # or :rollback
restart_command "touch tmp/restart.txt"
scm_provider Chef::Provider::Git # is the default, for svn:
Chef::Provider::Subversion
end

web_app app[‘id’] do
docroot "#{app_path}/current/public"
template "apache_virtualhost.erb"
server_name app[‘apache’][‘server_name’]
server_aliases app[‘apache’][‘server_aliases’] || []
log_dir node[:apache][:log_dir]
rails_env app[‘environment’]
end
end

On Sat, Jan 14, 2012 at 2:01 AM, millisami r millisami@gmail.com wrote:

Hi, I went through the Quick Start guide for radiant rails app deployment at
and I did installed it correctly.

The files
at data_bags/apps/radiant.json, roles/radiant.rb and cookbooks/radiantall
uses radiant as a base app name.

Now I am trying to create another radiant app (say: another_radiant). Here I
am confused how to go ahead if I have to host another 3rd radiant app. This
seems perfectly to go the Data Driven App Deploys way.

Looking inside the above rails stack, its name is radiant as cookbook,
databags and roles as well.

So, for the new radiant stack app named another_radiant, do I have to copy
those allradiant components into another_radiant for all cookbook, databag
and roles too?

Or is there any better way so that it will be flexible to maintain across
many servers?

@millisami
~Sachin Sagar Rai
Ruby on Rails Developer
http://tfm.com.np
http://nepalonrails.tumblr.com