deploy your rails apps on edge rails
1 2 desc "Checks out rails" 3 task :init do 4 ENV['SHARED_PATH'] = '../../shared' unless ENV['SHARED_PATH'] 5 ENV['RAILS_PATH'] ||= File.join(ENV['SHARED_PATH'], 'rails') 6 7 checkout_path = File.join(ENV['RAILS_PATH'], 'trunk') 8 export_path = "#{ENV['RAILS_PATH']}/rev_#{ENV['REVISION']}" 9 symlink_path = 'vendor/rails' 10 11 # do we need to checkout the file? 12 unless File.exists?(checkout_path) 13 puts 'setting up rails trunk' 14 get_framework_for checkout_path do |framework| 15 system "svn co http://dev.rubyonrails.org/svn/rails/trunk/#{framework}/lib #{checkout_path}/#{framework}/lib --quiet" 16 end 17 end 18 19 # do we need to export the revision? 20 unless File.exists?(export_path) 21 puts "setting up rails rev #{ENV['REVISION']}" 22 get_framework_for export_path do |framework| 23 system "svn up #{checkout_path}/#{framework}/lib -r #{ENV['REVISION']} --quiet" 24 system "svn export #{checkout_path}/#{framework}/lib #{export_path}/#{framework}/lib" 25 end 26 end 27 28 puts 'linking rails' 29 rm_rf symlink_path 30 mkdir_p symlink_path 31 32 get_framework_for symlink_path do |framework| 33 ln_s File.expand_path("#{export_path}/#{framework}/lib"), "#{symlink_path}/#{framework}/lib" 34 end 35 end 36 37 def get_framework_for(*paths) 38 %w( railties actionpack activerecord actionmailer activesupport actionwebservice ).each do |framework| 39 paths.each { |path| mkdir_p "#{path}/#{framework}" } 40 yield framework 41 end 42 end
Switchtower recipe code:
1 2 set :rails_version, 3517 3 desc "Checks out rails rev ##{rails_version}" 4 task :after_symlink do 5 run <<-CMD 6 cd #{current_release} && 7 rake init REVISION=#{rails_version} RAILS_PATH=/home/username/projects/rails 8 CMD 9 end