
Eu tenho um script Ruby que desejo executar como cron job. Ele funciona perfeitamente quando executo o prompt de comando em uma máquina Linux. Mas quando executo o mesmo script usando um cron job, ele falha.
Recebo o seguinte erro com codificação de string. Não sei por que ele só reclama quando estou executando como um cron job. Também configurei meu shell para /bin/bash no crontab, que é o mesmo shell do meu prompt de comando.
O erro que recebo é
em `encode': "\xE2" em US-ASCII (Encoding::InvalidByteSequenceError)
a linha de código que causa o erro é
split.encode('utf-8).split(some_str)
Responder1
A mensagem de erro informa que você configurou, no crontab
ambiente, US-ASCII como seu idioma, e que nesse idioma a string "\xE2" não existe. Provavelmente, isso se deve ao fato de a string ser codificada em ASCII-8 bits, embora seja necessário convertê-la para UTF-8.
É possível que o barbante tenha sido contaminado por algum caractere invisível, como costuma acontecer quando você corta e cola.
O seguinte, a ser aplicadoantesmanipular a string, deve resolver seu problema:
new_str = some_str.encode('utf-8', 'binary', :invalid => :replace, :undef => :replace, :replace => '')