app = node[:rails][:app] rails_base app[:name] do ruby_ver app[:ruby_ver] gemset app[:gemset] end %w{config log pids cached-copy bundle system}.each do |dir| directory "#{app[:app_root]}/shared/#{dir}" do owner app[:deploy_user] group app[:deploy_user] mode '0755' recursive true action :create end end keys = Chef::EncryptedDataBagItem.load('rails', app[:name]) create_database_config app[:name] do app_root node[:rails][:app][:app_root] deploy_user node[:rails][:app][:deploy_user] databases node[:rails][:app][:db][:databases] aliases node[:rails][:app][:db][:aliases] passwords keys["database_passwords"] end deploy_revision "#{app[:app_root]}" do repo app[:repo] revision cluster_settings["revision"] user app[:deploy_user] group app[:deploy_user] enable_submodules true environment({ "RAILS_ENV" => app[:environment], }) shallow_clone false if node["rails"][app[:name]].attribute?('one_time_action') # rollback, deploy, force_deploy action node["rails"][app[:name]]["one_time_action"] node["rails"][app[:name]].delete('one_time_action') else action :deploy end migrate true migration_command "/usr/local/rvm/bin/appname_bundle exec rake db:migrate --trace" before_migrate do template "#{release_path}/config/environments/#{app[:environment]}.rb" do source "#{release_path}/config/environments/chef_development.rb.erb" local true owner app[:deploy_user] group app[:deploy_user] mode '0400' variables(:environment_settings => app[:environment_settings].to_hash) end rvm_shell "Bundle install and assets precompile" do ruby_string "#{app[:ruby_ver]}@#{app[:gemset]}" cwd release_path user app[:deploy_user] group app[:deploy_user] # common_groups = %w{development test cucumber} # bundle install --deployment --path #{app[:app_root]}/shared/bundle --without #{common_groups.join(' ')} code %{ bundle install --path #{app[:app_root]}/shared/bundle } end end before_restart do rvm_shell "assets precompile" do ruby_string "#{app[:ruby_ver]}@#{app[:gemset]}" cwd release_path user app[:deploy_user] group app[:deploy_user] # TODO I could not set the environment via the builtin command. Does not look like it is getting passed to popen4 # So instead of `environment "RAILS_ENV" => app[:environment]` I have it in the code block code %{ export RAILS_ENV=#{app[:environment]} bundle exec rake assets:precompile } end end symlink_before_migrate({ "config/database.yml" => "config/database.yml", "config/environments/#{app[:environment]}.rb" => "config/environments/#{app[:environment]}.rb" }) after_restart do notify_airbrake release_path do environment app[:environment] repository app[:repo] end notify_newrelic release_path do environment app[:environment] end end end