---
name: "Rex::Transaction"
section: "3pm"
platform: "linux"
package: "rex"
version: "1.16.0-1"
release: "Debian 13 (Trixie)"
platforms: ["linux"]
url: "https://new.carta.tech/Rex::Transaction"
---

# Rex::Transaction(3pm)

Transaction support

## NAME

Rex::Transaction - Transaction support

## DESCRIPTION

With this module you can define transactions and rollback scenarios on failure.

## SYNOPSIS

```
 use Rex::Transaction;
 task 'do-something', 'server01', sub {
   transaction {
     on_rollback {
       rmdir '/tmp/mydata';
     };
     mkdir '/tmp/mydata';
     upload 'files/myapp.tar.gz', '/tmp/mydata';
     run 'tar xzf myapp.tar.gz -C /tmp/mydata';
     if ( $? != 0 ) { die('Error extracting myapp.tar.gz'); }
   };
 };
```

## EXPORTED FUNCTIONS

### transaction($codeRef)

Start a transaction for `$codeRef`. If `$codeRef` dies, Rex will run the on\_rollback \<https://metacpan.org/pod/Rex::Transaction#on\_rollback\> code to roll back the transaction.

```
 task 'deploy', group => 'frontend', sub {
   on_rollback {
     rmdir '...';
   };
   deploy 'myapp.tar.gz';
 };
 task 'restart_server', group => 'frontend', sub {
   service apache2 => 'restart';
 };
 task 'all', group => 'frontend', sub {
   transaction {
     do_task [qw/deploy restart_server/];
   };
 };
```

### on\_rollback($codeRef)

This will execute `$codeRef` if a step in the transaction \<https://metacpan.org/pod/Rex::Transaction#transaction\> fails.
