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."
- 21 Warrington
- 02 Tonge
- 03 Davis Dismissed after an earlier booking
- 06 Mullins
- 33 Ridehalgh
- 04 Arnason
- 10 O'Connor
- 15 Pringle
- 27 Frecklington (Noble - 72' )
- 09 Revell (Odejayi - 59' )
- 17 Nardiello (Cameron - 46' )
- 30 Thompson
- 19 Noble
- 31 Cameron
- 35 Kearns
- 11 Morgan
- 16 Odejayi
- 22 Agard
- 13 Mildenhall
- 02 Smith
- 06 Parks
- 14 Brown
- 29 McChrystal
- 15 Norburn
- 25 Clucas
- 26 Brunt (Woodards - 81' )
- 32 O'Toole Booked
- 10 Richard Booked (Harrison - 50' )
- 16 Anyinsah (Clarkson - 72' )
- 20 Gough
- 04 Woodards
- 11 Broghammer
- 21 McDonald
- 07 Clarkson
- 17 Harrison
- 27 Hitchcock
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