diff --git a/lib/deployml/frameworks/rails3.rb b/lib/deployml/frameworks/rails3.rb
index <HASH>..<HASH> 100644
--- a/lib/deployml/frameworks/rails3.rb
+++ b/lib/deployml/frameworks/rails3.rb
@@ -3,6 +3,10 @@ module DeploYML
     module Rails3
       protected
 
+      def after_upload(shell)
+        shell.run 'bundle', 'install'
+      end
+
       def migrate(shell)
         case config.orm
         when :datamapper
diff --git a/lib/deployml/project.rb b/lib/deployml/project.rb
index <HASH>..<HASH> 100644
--- a/lib/deployml/project.rb
+++ b/lib/deployml/project.rb
@@ -177,7 +177,13 @@ module DeploYML
       LocalShell.new do |shell|
         sync(shell) if tasks.include?(:sync)
 
-        upload(shell) if tasks.include?(:upload)
+        if tasks.include?(:upload)
+          before_upload(shell)
+
+          upload(shell)
+
+          after_upload(shell)
+        end
       end
 
       session = RemoteShell.new do |shell|
@@ -274,6 +280,12 @@ module DeploYML
     end
 
     #
+    # Place-holder method.
+    #
+    def before_upload(shell)
+    end
+
+    #
     # Uploads the staged project to the destination server.
     #
     def upload(shell)
@@ -298,6 +310,12 @@ module DeploYML
     #
     # Place-holder method.
     #
+    def after_upload(shell)
+    end
+
+    #
+    # Place-holder method.
+    #
     def migrate(shell)
     end
Added the before_upload and after_upload methods.

* Added Frameworks::Rails3#after_upload to run "bundle install".