Deploy Application via Chef
After creating the Ruby on Rails application mentioned in my blog, the next task was to deploy the application to a hosted web server.
The traditional way would be to write rake tasks and trigger them manually or using a CI build/deploy. Well chef provides another easy solution to deploy an application. The recipe below performs all the tasks of deploying an application. The before_migrate script contains the tasks that need to be performed before the application kicks in. The migration_command is the final command that is run to mark deployment successful. deploy_revision is used to make sure that the recipe would only be executed once the git head changes in the repository from the last deployed version. symlink_before_migrate can be used to create symlinks to the yml files used in the configuring the application.
The deploy cookbook for a basic app looks like below
The traditional way would be to write rake tasks and trigger them manually or using a CI build/deploy. Well chef provides another easy solution to deploy an application. The recipe below performs all the tasks of deploying an application. The before_migrate script contains the tasks that need to be performed before the application kicks in. The migration_command is the final command that is run to mark deployment successful. deploy_revision is used to make sure that the recipe would only be executed once the git head changes in the repository from the last deployed version. symlink_before_migrate can be used to create symlinks to the yml files used in the configuring the application.
The deploy cookbook for a basic app looks like below
app_user="user" deploy_dir="/opt/application_deploy" user app_user directory "/home/#{app_user}/.ssh" do mode "0700" owner app_user group app_user end cookbook_file "/home/#{app_user}/.ssh/deploy" do source "deploy" mode "0600" owner app_user group app_user end cookbook_file"/home/#{app_user}/.ssh/config" do source "ssh_config" mode "0644" owner app_user group app_user end directory deploy_dir do recursive true owner app_user group app_user mode "755" end %w{config log}.each do |dir| directory "#{deploy_dir}/shared/#{dir}" do owner app_user group app_user mode "755" recursive true end end gem_package "bundler" cookbook_file "#{deploy_dir}/shared/config/database.yml" do source "database.yml" mode "0644" owner app_user group app_user end deploy_revision deploy_dir do repo "<Git hub repository ssh url>" environment "production" revision "HEAD" user app_user symlink_before_migrate "config/database.yml" => "config/database.yml" migration_command "bundle exec rails server -d -e production" migrate true action :deploy restart_command "touch tmp/restart.txt" before_migrate do execute "bundle install" do command "bundle install --path .bundle" cwd "#{release_path}" user app_user end execute "Create db" do command 'bundle exec rake db:create RAILS_ENV="production" ' cwd "#{release_path}" user app_user end execute "Migrate db" do command 'bundle exec rake db:migrate RAILS_ENV="production"' cwd "#{release_path}" user app_user end end end
Comments
Post a Comment