Skip to content

Commit

Permalink
Merge pull request #74 from kennethkalmer/living-on-the-edge
Browse files Browse the repository at this point in the history
Removed support 'freezing daemon-kit into vendor/'
  • Loading branch information
kennethkalmer committed Sep 17, 2013
2 parents df21169 + 2d8eaed commit 2be5551
Show file tree
Hide file tree
Showing 35 changed files with 414 additions and 128 deletions.
2 changes: 2 additions & 0 deletions .rspec
Original file line number Diff line number Diff line change
@@ -0,0 +1,2 @@
--colour
--pattern "spec/*_spec.rb"
11 changes: 11 additions & 0 deletions Upgrading.md
Original file line number Diff line number Diff line change
@@ -1,6 +1,17 @@
Some important upgrading information
====================================

Upgrading to 0.3.0
------------------

From 0.2 there hasn't been any signifant changes. 0.3.0.rc2 made some changes
to the way a daemon boots, so after updating you'll need to run:

$ rake daemon_kit:upgrade

We recommend running this task on a clean repo, or branch, so you can review
the changes using your favourite diff tool.

Upgrading to 0.1.9
------------------

Expand Down
5 changes: 5 additions & 0 deletions features/app_generator.feature
Original file line number Diff line number Diff line change
Expand Up @@ -44,3 +44,8 @@ Feature: Generating a new daemon
| tasks |
| vendor |
| tmp |

Scenario: Generating an 'edge' daemon
When I run `daemon-kit vuvuzela --edge`
And I cd to "vuvuzela"
Then the Gemfile should point to edge daemon-kit
17 changes: 17 additions & 0 deletions features/step_definitions/daemon_steps.rb
Original file line number Diff line number Diff line change
Expand Up @@ -8,3 +8,20 @@
type "a\n"
#eot
end

Then(/^the Gemfile should point to edge daemon\-kit$/) do
prep_for_fs_check do
gemfile = IO.read('Gemfile')

gemfile.should =~ /^gem 'daemon\-kit', :github => 'kennethkalmer\/daemon\-kit'$/
gemfile.should_not =~ /^gem 'daemon\-kit'$/
end
end

Given(/^I have a daemon generated by daemon\-kit "(.*?)"$/) do |project|
copy_fixture_project( project )
end

Given(/^I cd to the old project$/) do
cd "fixture_project"
end
21 changes: 21 additions & 0 deletions features/support/fixtures.rb
Original file line number Diff line number Diff line change
@@ -0,0 +1,21 @@
module ProjectFixtures
DAEMON_FIXTURES_PATH = File.expand_path( '../../../spec/fixtures', __FILE__ )

def copy_fixture_project( name )
name = case name
when '0.2.3'
'zero_two_three'
else
raise ArgumentError, "Unknown fixture project: #{name}"
end

src = File.join( DAEMON_FIXTURES_PATH, name )

in_current_dir do
FileUtils.cp_r( src, 'fixture_project' )
end
end

end

World( ProjectFixtures )
11 changes: 11 additions & 0 deletions features/upgrades.feature
Original file line number Diff line number Diff line change
@@ -0,0 +1,11 @@
Feature: Upgrading an older daemon

daemon-kit offers help during upgrades to newer versions.

Scenario: Upgrading from 0.2.3
Given I have a daemon generated by daemon-kit "0.2.3"
And I cd to the old project
When I run `rake daemon_kit:upgrade` interactively
And I accept the conflicts
Then the file "Gemfile" should contain "gem 'daemon-kit', :github => 'kennethkalmer/daemon-kit'"
And the file "config/boot.rb" should not contain "VendorBoot"
1 change: 0 additions & 1 deletion lib/daemon_kit/abstract_logger.rb
Original file line number Diff line number Diff line change
Expand Up @@ -160,7 +160,6 @@ def logger=( logger )
def clean_trace( trace )
trace = trace.map { |l| l.gsub(DAEMON_ROOT, '') }
trace = trace.reject { |l| l =~ /gems\/daemon[\-_]kit/ }
trace = trace.reject { |l| l =~ /vendor\/daemon[\-_]kit/ }
trace
end

Expand Down
115 changes: 17 additions & 98 deletions lib/daemon_kit/tasks/framework.rake
Original file line number Diff line number Diff line change
@@ -1,80 +1,9 @@
namespace :daemon_kit do
namespace :freeze do
desc "Lock this application to the current gem (by unpacking it into vendor/daemon_kit)"
task :gems do
deps = %w()
require 'rubygems'
require 'rubygems/gem_runner'

kit = (version = ENV['VERSION']) ?
Gem.cache.find_name('daemon-kit', "= #{version}").first :
Gem.cache.find_name('daemon-kit').sort_by { |g| g.version }.last

version ||= kit.version

unless kit
puts "No daemon_kit gem #{version} is installed. Do 'gem list daemon-kit' to see what you have available."
exit
end

puts "Freezing the gem for DaemonKit #{kit.version}"
mkdir_p "vendor"

begin
chdir("vendor") do
kit.dependencies.select { |g| deps.include? g.name }.each do |g|
Gem::GemRunner.new.run(["unpack", g.name, "--version", g.version_requirements.to_s])
mv(Dir.glob("#{g.name}*").first, g.name)
end

Gem::GemRunner.new.run(["unpack", "daemon-kit", "--version", "=#{version}"])
FileUtils.mv(Dir.glob("daemon-kit*").first, "daemon-kit")
end
rescue Exception
rm_rf "vendor/daemon-kit"
raise
end
end

desc 'Lock to latest edge daemon_kit'
task :edge do
require 'open-uri'
#version = ENV["RELEASE"] || "edge"
commits = "http://github.com/api/v1/yaml/kennethkalmer/daemon-kit/commits/master"
url = "http://github.com/kennethkalmer/daemon-kit/zipball/master"

rm_rf "vendor/daemon-kit"

chdir 'vendor' do
latest_revision = YAML.load(open(commits))["commits"].first["id"]

puts "Downloading DaemonKit from #{url}"
File.open('daemon-kit.zip', 'wb') do |dst|
open url do |src|
while chunk = src.read(4096)
dst << chunk
end
end
end

puts 'Unpacking DaemonKit'
rm_rf 'daemon-kit'
`unzip daemon-kit.zip`
FileUtils.mv(Dir.glob("kennethkalmer-daemon-kit*").first, "daemon-kit")
%w(daemon-kit.zip).each do |goner|
rm_f goner
end

touch "REVISION_#{latest_revision}"
end
end

end

desc "Upgrade your local files for a daemon after upgrading daemon-kit"
task :upgrade => 'environment' do
# Run these
%w{ initializers rakefile scripts gemfile }.each do |t|
%w{ config root scripts }.each do |t|
Rake::Task["daemon_kit:upgrade:#{t}"].invoke
end

Expand All @@ -83,41 +12,31 @@ namespace :daemon_kit do
end

namespace :upgrade do
# Upgrade the initializers
task :initializers do
copy_framework_template( 'config', 'boot.rb' )
def invoke_from_app_generator(method)
app_generator.send(method)
end

if File.directory?( File.join(DaemonKit.root, 'config', 'initializers') )
mv File.join(DaemonKit.root, 'config', 'initializers'), File.join(DAEMON_ROOT, 'config', 'pre-daemonize')
copy_framework_template( 'config', 'pre-daemonize', 'readme' )
end
def app_generator
@app_generator ||= begin
require 'daemon_kit/generators'

unless File.directory?( File.join(DAEMON_ROOT, 'config', 'post-daemonize') )
mkdir_p File.join(DAEMON_ROOT, 'config', 'post-daemonize')
copy_framework_template( 'config', 'post-daemonize', 'readme' )
name = DaemonKit.configuration.daemon_name
gen = DaemonKit::Generators::AppGenerator.new( [name], { :with_dispatchers => true },
:destination_root => DaemonKit.root )
gen
end
end

# Upgrade the Rakefile
task :rakefile do
copy_framework_template( 'Rakefile' )
task :config do
invoke_from_app_generator(:create_config_files)
end

# Upgrade the scripts
task :scripts do
%w{ console destroy generate }.each do |s|
copy_framework_template( "script", s )
end
task :root do
invoke_from_app_generator(:create_root_files)
end

# Upgrade the Gemfile
task :gemfile do
copy_framework_template( 'Gemfile' )
task :scripts do
invoke_from_app_generator(:create_script_files)
end
end
end

def copy_framework_template( *args )
src_dir = File.join(DaemonKit.framework_root, 'lib', 'generators', 'daemon_kit', 'app', 'templates')
cp File.join( src_dir, *args ), File.join( DaemonKit.root, *args )
end
10 changes: 8 additions & 2 deletions lib/generators/daemon_kit/app/app_generator.rb
Original file line number Diff line number Diff line change
Expand Up @@ -20,6 +20,9 @@ class AppGenerator < Base
class_option :cucumber, :type => :boolean, :aliases => '-c', :default => false,
:desc => "Install cucumber support"

class_option :edge, :type => :boolean, :default => false,
:desc => "Let the initial Gemfile track kennethkalmer/daemon-kit instead of rubygems"

def initialize( *args )
super

Expand All @@ -42,10 +45,13 @@ def create_root
FileUtils.cd( destination_root )
end

def create_root_files
def create_readme
template 'README.tt', 'README'
end

def create_root_files
copy_file 'Rakefile'
copy_file 'Gemfile'
template 'Gemfile.tt', 'Gemfile'
end

def create_bin_files
Expand Down
25 changes: 25 additions & 0 deletions lib/generators/daemon_kit/app/templates/Gemfile.tt
Original file line number Diff line number Diff line change
@@ -0,0 +1,25 @@
# Update this Gemfile with any additional dependencies and run
# 'bundle install' to get them all installed. Daemon-kit's capistrano
# deployment will ensure that the bundle required by your daemon is properly
# installed.
#
# For more information on bundler, please visit http://gembundler.com

source 'https://rubygems.org'

<% if options.edge? -%>
gem 'daemon-kit', :github => 'kennethkalmer/daemon-kit'
<% else -%>
# Live on the edge instead: gem 'daemon-kit', :github => 'kennethkalmer/daemon-kit'
gem 'daemon-kit'
<% end -%>

#
# safely (http://github.com/kennethkalmer/safely)
#

gem 'safely' # Optional, but recommended.

# gem 'toadhopper' # For reporting exceptions to hoptoad
# gem 'mail' # For reporting exceptions via mail

2 changes: 1 addition & 1 deletion lib/generators/daemon_kit/app/templates/README.tt
Original file line number Diff line number Diff line change
Expand Up @@ -29,7 +29,7 @@ tasks/
Place for rake tasks

vendor/
Place for unpacked gems and DaemonKit
Place for third-party code that can't be bundled via the Gemfile

tmp/
Scratch folder
Expand Down
16 changes: 1 addition & 15 deletions lib/generators/daemon_kit/app/templates/config/boot.rb
Original file line number Diff line number Diff line change
Expand Up @@ -10,21 +10,13 @@ module DaemonKit
class << self
def boot!
unless booted?
pick_boot.run
GemBoot.new.run
end
end

def booted?
defined? DaemonKit::Initializer
end

def pick_boot
(vendor_kit? ? VendorBoot : GemBoot).new
end

def vendor_kit?
File.exists?( "#{DAEMON_ROOT}/vendor/daemon-kit" )
end
end

class Boot
Expand All @@ -34,12 +26,6 @@ def run
end
end

class VendorBoot < Boot
def load_initializer
require "#{DAEMON_ROOT}/vendor/daemon-kit/lib/daemon_kit/initializer"
end
end

class GemBoot < Boot
def load_initializer
begin
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -31,11 +31,6 @@ set :config_files, %w{}
# into the root directory of the deployment.
set :shared_children, %w{log tmp}

# Record our dependencies
unless File.directory?( "#{DaemonKit.root}/vendor/daemon_kit" )
depend :remote, :gem, "daemon-kit", ">=#{DaemonKit.version}"
end

# Hook into capistrano's events
before "deploy:update_code", "deploy:check"

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -11,11 +11,11 @@ source 'https://rubygems.org'
# daemon-kit
gem 'daemon-kit'

#
# safely (http://github.com/kennethkalmer/safely)
#

gem 'safely' # Optional, but recommended.

gem 'safely'
# gem 'toadhopper' # For reporting exceptions to hoptoad
# gem 'mail' # For reporting exceptions via mail
group :development, :test do
gem 'rake'
gem 'rspec'
end

0 comments on commit 2be5551

Please sign in to comment.