title: Can't convert 'Hash' into 'String'
body: <p>I'm trying to deploy via <code>capistrano</code> and for some reason, I'm getting:</p>
  
  <pre><code>/Users/mysite/.rvm/gems/ruby-1.9.2-p318@fbadapter/gems/json-1.4.6/lib/json/common.rb:146:in `initialize': can't convert Hash into String (TypeError)
    from /Users/mysite/.rvm/gems/ruby-1.9.2-p318@fbadapter/gems/json-1.4.6/lib/json/common.rb:146:in `new'
    from /Users/mysite/.rvm/gems/ruby-1.9.2-p318@fbadapter/gems/json-1.4.6/lib/json/common.rb:146:in `parse'
    from /Users/mysite/.rvm/gems/ruby-1.9.2-p318@fbadapter/gems/chef-capistrano-0.1.0/lib/chef/capistrano.rb:27:in `role_from_chef'
    from ./config/deploy.rb:35:in `block in load'
  </code></pre>
  
  <p>The lines in question of my <code>config/deploy.rb</code> are:</p>
  
  <pre><code>after 'multistage:ensure' do
   role_from_chef :db, 'app', :limit =&gt; 1, :primary =&gt; true # perform db operations on one of the app servers
   role_from_chef :web, 'app'
   role_from_chef :app
   role_from_chef :queue
   role_from_chef :cron
  end
  </code></pre>
  
  <p>the second line is line 35</p>
  
  <p><strong>UPDATED CODE</strong></p>
  
  <pre><code>  def role_from_chef(cap_role, *roles)
      %w(chef_host chef_port chef_scheme chef_client_name chef_key_file).each do |value|
        abort "Please set :#{value}" unless exists?(value.to_sym)
      end
  
      Spice.setup do |s|
        s.host = fetch(:chef_host)
        s.port = fetch(:chef_port)
        s.scheme = fetch(:chef_scheme)
        s.client_name = fetch(:chef_client_name)
        s.key_file = fetch(:chef_key_file)
      end
      Spice.connect!
  
      options = roles.extract_options!
      roles = [cap_role.to_s] if roles.empty?
      search_roles = fetch(:chef_search_roles) + roles
      query = search_roles.map{|r| "role:#{r}"}.join(" AND ")
  
      response = Spice.connection.get("/search/node?q=#{URI.encode(query)}")        
      response_object = JSON.parse(response)
      raise response_object['error'].join(' ') if response_object.has_key?('error')
  
      nodes = response_object['rows']
      hosts = nodes.select{|n| n['ec2']}.map{|n| n['ec2']['public_hostname']}
  
      if limit = options.delete(:limit)
        hosts = hosts.slice(0, limit)
      end
  
      hosts.each do |host|
        node = nodes.detect { |n| n['ec2']['public_hostname'] == host }
        puts "#{cap_role}: #{node['ec2']['instance_id']} - #{node['ec2']['public_hostname']}"
      end
  
      hosts &lt;&lt; options
      role cap_role, *hosts
    end
  </code></pre>