Claude Davis was sent off on his Rotherham debut as Bristol Rovers secured a convincing win to lift them off the bottom of the League Two table.
It was Davis who bundled over Ryan Brunt to earn Rovers a penalty, which was converted by midfielder Lee Brown.
The defender then received a second yellow card just before half-time.
Ellis Harrison's superb solo effort made it 2-0 and Joe Anyinsah drilled home a third before substitute David Noble grabbed a consolation.
It was a memorable first senior goal for 18-year-old Harrison, who came through Rovers' academy set-up.
He had only been on the pitch for two minutes, having come on as a substitute for Eliot Richards, when he picked up the ball on the half-way line, weaved through the Millers' defence and fired a fierce right-footed shot past Andy Warrington.
Forward Anyinsah had been out of favour under former Rovers boss Mark McGhee but has rediscovered his form since John Ward's return - his powerful low effort into the bottom-left corner was his second goal in three games.
Noble gave Ward's side a scare when he drilled in just two minutes after arriving on the field, but Rovers settled their nerves and claimed a valuable three points.
VIEW FROM THE DRESSING ROOM
Bristol Rovers manager John Ward told BBC Radio Bristol:
"We had to get through the first 20 minutes without a dent, and we did that pretty well.
"We scored two great goals and and showed a bit of quality.
"We had a discipline about the team and they responded very well.
"It gives the players a lift as they now know what they can achieve. They shouldn't limit themselves to what they can do."
Rotherham manager Steve Evans told BBC Radio Sheffield:
"I think if you make individual errors like that then you're going to lose football matches.
"I don't think there is a manager or coaching staff in the the country that can legislate for the three errors that gave Bristol Rovers three goals.
"We lacked energy, a spark, a passion but we still dominated the ball.
"We didn't work hard enough and if you don't work hard enough then you don't get the chance to play properly."
Live Text Commentary
Full Time The referee brings the game to a close.84:02
Seanan Clucas handles the ball and concedes a free kick. Free kick crossed by Ben Pringle, Steve Mildenhall makes a save.82:14
The offside flag is raised against Kayode Odejayi. Free kick taken by Steve Mildenhall.80:44 Substitution
Substitution Danny Woodards on for Ryan Brunt.79:44
Foul by Ryan Brunt on Kari Arnason, free kick awarded. Dale Tonge restarts play with the free kick.78:11
Michael O'Connor fouled by John-Joe O'Toole, the ref awards a free kick. Liam Ridehalgh delivers the ball from the free kick left-footed from left channel, save by Steve Mildenhall.74:17
Kari Arnason delivers the ball, Johnny Mullins produces a header from inside the six-yard box that clears the bar.72:21
Assist on the goal came from Kari Arnason.72:21 Goal scored
Goal! - David Noble - Rotherham 1 - 3 Bristol R Goal scored by David Noble from just outside the area to the top left corner of the goal. Rotherham 1-3 Bristol Rovers.71:16 Substitution
Substitution David Clarkson replaces Joe Anyinsah.71:16 Substitution
Substitution David Noble on for Lee Frecklington.70:38
Shot from 25 yards from Ellis Harrison. Save by Andy Warrington.66:35
Corner from the left by-line taken by Michael O'Connor, Tom Parkes makes a clearance.66:12
Lee Frecklington takes a shot. Save by Steve Mildenhall.63:44
Foul by Dale Tonge on John-Joe O'Toole, free kick awarded. Oliver Norburn restarts play with the free kick.62:45
Ellis Harrison concedes a free kick for a foul on Dale Tonge. Free kick crossed by Ben Pringle, Oliver Norburn makes a clearance.60:20
Michael Smith provided the assist for the goal.60:20 Goal scored
Goal! - Joe Anyinsah - Rotherham 0 - 3 Bristol R Joe Anyinsah grabs a goal from inside the area to the bottom left corner of the goal. Rotherham 0-3 Bristol Rovers.59:00 Substitution
Substitution Kayode Odejayi on for Alex Revell.58:38
Headed effort from deep inside the area by Johnny Mullins misses to the right of the goal.
Goal! - Ellis Harrison - Rotherham 0 - 2 Bristol R A goal is scored by Ellis Harrison from deep inside the penalty area to the bottom right corner of the goal. Rotherham 0-2 Bristol Rovers.49:28 Substitution
Substitution Ellis Harrison joins the action as a substitute, replacing Eliot Richards.47:58
Foul by Eliot Richards on Dale Tonge, free kick awarded. Ben Pringle delivers the ball from the free kick left-footed from right wing, save by Steve Mildenhall.46:23
Johnny Mullins delivers the ball, Alex Revell takes a shot. Save made by Steve Mildenhall.45:44
Foul by John-Joe O'Toole on Michael O'Connor, free kick awarded. Liam Ridehalgh takes the indirect free kick.45:01
The referee gets the second half started.45:01 Substitution
Substitution Courtney Cameron joins the action as a substitute, replacing Daniel Nardiello.45:00 +3:20 Half time
Half Time The first half comes to an end.45:00 +3:04
Eliot Richards produces a right-footed shot from just outside the box that goes wide right of the goal.45:00 +2:07 Dismissal
Dismissal Claude Davis is sent off by the referee.45:00 +1:55
Free kick awarded for an unfair challenge on Eliot Richards by Claude Davis. Indirect free kick taken by Lee Brown.45:00 +0:52
Lee Frecklington takes a shot. Steve Mildenhall makes a save.44:37
The offside flag is raised against Ryan Brunt. Andy Warrington takes the free kick.42:31 Goal scored
Goal! - Lee Brown - Rotherham 0 - 1 Bristol R Placed penalty scored by Lee Brown. Rotherham 0-1 Bristol Rovers.41:53
Penalty awarded for an unfair challenge on Ryan Brunt by Dale Tonge.40:42
Michael O'Connor concedes a free kick for a foul on John-Joe O'Toole. Free kick taken by Lee Brown.39:38
Corner taken left-footed by Ben Pringle, save made by Steve Mildenhall.37:40
Lee Frecklington concedes a free kick for a foul on Joe Anyinsah. Indirect free kick taken by Tom Parkes.36:40
Inswinging corner taken right-footed by Oliver Norburn from the left by-line to the near post, Liam Ridehalgh manages to make a clearance.32:32
Unfair challenge on Lee Frecklington by Ryan Brunt results in a free kick. Free kick taken by Liam Ridehalgh.31:37
Ben Pringle fouled by Ryan Brunt, the ref awards a free kick. Indirect free kick taken by Ben Pringle.31:05
Inswinging corner taken right-footed by Michael O'Connor from the left by-line, save by Steve Mildenhall.29:37
Michael O'Connor has a direct shot on goal from the free kick, clearance made by Oliver Norburn.29:37 Booking
Booking John-Joe O'Toole receives a yellow card.29:28
Free kick awarded for a foul by John-Joe O'Toole on Ben Pringle.27:28
Outswinging corner taken right-footed by Oliver Norburn, Dale Tonge manages to make a clearance.27:10
Ryan Brunt takes a shot. Blocked by Johnny Mullins.26:25
Foul by Ryan Brunt on Liam Ridehalgh, free kick awarded. Andy Warrington takes the indirect free kick.25:04
The assistant referee flags for offside against Ryan Brunt. Indirect free kick taken by Dale Tonge.15:16
Oliver Norburn takes the outswinging corner, clearance made by Johnny Mullins.14:40
Corner taken right-footed by Oliver Norburn to the near post, clearance by Dale Tonge.14:09
The referee blows for offside. Steve Mildenhall takes the indirect free kick.13:29
Ryan Brunt challenges Johnny Mullins unfairly and gives away a free kick. Free kick taken by Andy Warrington.11:59
Outswinging corner taken by Oliver Norburn from the right by-line, clearance made by Kari Arnason.11:33
Oliver Norburn takes a corner.10:26
Ben Pringle delivers the ball from the free kick left-footed from right channel, save by Steve Mildenhall.10:26 Booking
Booking Eliot Richards shown a yellow card.10:20
Eliot Richards concedes a free kick for a foul on Kari Arnason.8:58
Free kick taken by Oliver Norburn.8:58 Booking
Booking Claude Davis goes into the book.8:41
Foul by Claude Davis on Ryan Brunt, free kick awarded.3:47
Ben Pringle gives away a free kick for an unfair challenge on Oliver Norburn. Steve Mildenhall takes the free kick.0:00
The match has kicked off.
Live data and text provided by our data suppliers