title: Run remote rake task from capistrano, cap deploy bash: -c: line 1: syntax error: unexpected end of file
body: <p>I followed the answer from @Coward in this topic: <a href="https://stackoverflow.com/questions/312214/how-do-i-run-a-rake-task-from-capistrano">How do I run a rake task from Capistrano?</a>
  to add a customizing task <code>rake:invoke</code> in my <code>deploy.rb</code> to be able to invoke rake tasks remotely.</p>
  
  <p>It works perfect on it's own part, but I get following error when my <code>cap deploy</code> processing is doing <code>assets:precompile</code></p>
  
  <pre><code>[mydomain.com] rvm_path=/usr/local/rvm /usr/local/rvm/bin/rvm-shell '1.9.2@ziya' -c 'cd /var/deploy/ziya/releases/20120223100338 &amp;&amp; #&lt;Capistrano::Configuration::Namespaces::Namespace:0x007ff2b4a4bad8&gt; RAILS_ENV=staging RAILS_GROUPS=assets assets:precompile'
   ** [out :: my domain.com] bash: -c: line 1: syntax error: unexpected end of file
      command finished in 1265ms
  </code></pre>
  
  <p>it's like kind of injection something, but I just can't find out what's going wrong in my deploy.rb</p>
  
  <p><strong>deploy.rb:</strong></p>
  
  <pre><code>$:.unshift(File.expand_path('./lib', ENV['rvm_path'])) # Add RVM's lib directory to the load path.
  require "rvm/capistrano"                  # Load RVM's capistrano plugin.
  set :rvm_ruby_string, '1.9.2@ziya'
  set :use_sudo, true
  
  require "bundler/capistrano"
  
  set :stages, %w(staging production)
  set :default_stage, "production"
  require 'capistrano/ext/multistage'
  
  set :application, "my application"
  
  # ssh to the deploy server
  default_run_options[:pty] = true
  
  # setup scm:
  set :repository,  "mygiturl"
  set :deploy_via, :remote_cache
  set :scm_username, "myusernmae"
  set :scm, :git
  set :scm_verbose, "true"
  set :branch, "master"
  ssh_options[:forward_agent] = true
  
  set(:releases_path)     { File.join(deploy_to, version_dir) }
  set(:shared_path)       { File.join(deploy_to, shared_dir) }
  set(:current_path)      { File.join(deploy_to, current_dir) }
  set(:release_path)      { File.join(releases_path, release_name) }
  
  set :deploy_to, "/var/deploy/#{application}"
  
  # If you are using Passenger mod_rails uncomment this:
  namespace :deploy do
    task :start do ; end
    task :stop do ; end
    task :restart, :roles =&gt; :app, :except =&gt; { :no_release =&gt; true } do
      run "#{try_sudo} touch #{File.join(current_path,'tmp','restart.txt')}"
    end
  
    task :bootstrap do
      run "cd #{release_path}; rake bootstrap:all RAILS_ENV=#{rails_env}"
    end
  
    task :import_all do
      run "cd #{release_path}; rake import:pages RAILS_ENV=#{rails_env}"
      run "cd #{release_path}; rake import:legacy_all RAILS_ENV=#{rails_env}"
    end  
  
    task :import_pages do
      run "cd #{release_path}; rake import:pages RAILS_ENV=#{rails_env}"
    end
  end
  
  namespace :rake do  
    desc "Run a task on a remote server."  
    # run like: cap staging rake:invoke task=a_certain_task  
    task :invoke do  
      run("cd #{deploy_to}/current; /usr/bin/env rake #{ENV['task']} RAILS_ENV=#{rails_env}")  
    end  
  end
  </code></pre>
  
  <p>But if I move the <code>task :invoke</code> into <code>namespace :deploy</code>, drop the <code>namespace :rake</code>, then everything is ok, it's so confusing..</p>