The pact is believed to be for $2 million, reports Jon Heyman of MLB Network.
Miller posted an .894 OPS with 13 home runs in 79 games split between the Cleveland Indians and Philadelphia Phillies last season. He recorded a .941 OPS after joining the Phillies in mid-June.
The seven-year veteran's 2019 campaign started off with a spring training invite from the Los Angeles Dodgers, but he was released and then signed with the Indians. Miller was then designated for assignment after just 13 games with Cleveland and joined the New York Yankees on a minor-league contract. However, the 30-year-old only played for New York's Triple-A affiliate before being sent to Philadelphia.
During his MLB career, Miller has also suited up for the Seattle Mariners, Tampa Bay Rays, and Milwaukee Brewers. His best season came in 2016 when he hit 30 home runs with 81 RBIs for the Rays.
To make room for Miller on the 40-man roster, the Cardinals placed right-hander Jordan Hicks (elbow) on the 60-day injured list.