voglio scrivere qualcosa su un file.Errno :: ENOENT (Nessun file o directory @ rb_sysopen
# where userid is any intger [sic]
path = Rails.root + "public/system/users/#{user.id}/style/img.jpg"
File.open(path, 'wb') do |file|
file.puts f.read
end
Quando viene eseguito questo codice, sto ottenendo questo errore. So che questa cartella doesn' t esistono, ma File.open
con modalità w
crea un nuovo file se non esiste.
Perché questo non funziona?
Basta essere curiosi: Perché è consigliabile File.join qui? Unisce i componenti del percorso sempre con il separatore specifico della piattaforma (ad esempio '\' su Windows). Mentre ci ** sono ** casi, dove questo è ciò che vogliamo ottenere, di solito cerchiamo di restare con '/' su tutte le piattaforme, perché questo dà meno mal di testa per quanto riguarda la portabilità. Nel caso del codice pubblicato qui, non vedo perché i separatori di file specifici della piattaforma potrebbero essere un vantaggio. – user1934428
@ user1934428 "di solito proviamo ad attaccarci con/su tutte le piattaforme, perché questo dà meno mal di testa per quanto riguarda la portabilità" - non si tratta di sciocchezze, l'uso di "File.join" aiuta ad evitare errori stupidi come quello nell'OP: Rails.root' non termina con una barra e usando '+' restituisce '/ railsrootpublic /' (notare la mancanza di barra qui sopra) – mudasobwa
@mudasobwa: Nella mia console rails Rails.root + "bla/bla" GIves corretti path :) – ashwintastic