Nel 1913 una "zitella" americana, Harriet Winslow, non volendo più vivere con la pensione che la madre percepisce ingiustamente per il marito ufficiale, creduto morto nella guerra di Cuba (mentre è vivo e lontano), accetta il posto di insegnante d'inglese per i figli di un ricco proprietario messicano. Ma quando giunge nel Messico, si trova in mezzo ai disordinati combattimenti fra le truppe regolari e quelle rivoluzionarie di Pancho Villa, e scopre che i suoi datori di lavoro sono fuggiti, abbandonando la loro "hacienda" ai rivoltosi. Qui Harriet ha modo di conoscere due uomini: il giovane e aitante generale Tomas Arroyo, inviato da Villa per conquistare la zona, e un vecchio e originale americano, simpatizzante per il popolo che dice di chiamarsi Bitter, ma che tutti conoscono con il nome di "Vecchio Gringo", e che sembra soprattutto cercare una morte dignitosa per chiudere la sua lunga vita. Arroyo, che è nato proprio in quel villaggio, essendo figlio illegittimo del ricco proprietario della "hacienda" (cosa che gli è costata in passato molte umiliazioni), si gode ora la rivincita e le comode eleganze della casa dei suoi avi, comportandosi come un proprietario. Trascura perciò di raggiungere Villa, come questi gli ha ordinato, anche perché è attratto da Harriet. Questa, eccitata dalla nuova vita che conduce, fra combattimenti, feste popolari e libertà di costumi, rimane affascinata da Tomas, che la corteggia appassionatamente e con il quale trascorre una notte d'amore. Ma il vecchio Gringo, spinge Arroyo a tornare al suo dovere di soldato, costringendolo a riflettere sul proprio comportamento: Tomas gli spara più colpi, uccidendolo. Solo dopo la sua morte Harriet apprende che il vecchio era in realtà il caustico scrittore Ambrose Bierce, da lei tanto ammirato. Giunge intanto sul posto Pancho Villa, costretto a far fucilare il suo generale, come disertore. Harriet, sconvolta, riparte allora per gli Stati Uniti, portando con sé la salma del vecchio Gringo che ha dichiarato essere quella di suo padre, il capitano Winslow.