2012-01-13 14 views
10

L'app funziona correttamente in fase di sviluppo ma in produzione viene visualizzato Errno :: EACCES Errore di autorizzazione negata quando si tenta di caricare un file utilizzando Carrierwave. Sono sicuro che abbia qualcosa a che fare con le autorizzazioni. Come posso impostare le autorizzazioni per consentire i caricamenti di file?Rails 3. ottenere Errno :: EACCES Autorizzazione negata durante il caricamento di file in produzione

pdf_uploader.rb

def store_dir 
    "#{Rails.root}/uploads/#{model.id}" 
end 

def cache_dir 
    "#{Rails.root}/tmp/uploads/cache/#{model.id}" 
end 
+1

è questo heroku o un servizio diverso? –

+0

è un'app che utilizza ActiveAdmin. Utilizza CarrierWave per i caricamenti di file. Io uso Apache e Passenger. – leonel

+1

Stavo ricevendo 'Errno :: EACCESS' su'/uploads '.. la mia correzione era di aggiungere '# {Rails.root}/public /' al metodo 'store_dir'. :) Spero che aiuti qualcuno! – RGB

risposta

15
chmod -R 777 PATH_TO_APP/uploads 
chmod -R 777 PATH_TO_APP/tmp 
+9

non è pericoloso? – leonel

+0

No, è normale rendere tali directory scrivibili per altri utenti. – alexkv

+0

come assicurarsi che questa directory abbia le autorizzazioni appropriate per le app di produzione distribuite usando capistrano? – Danny

2

Uhm Ho avuto lo stesso problema con un server di Ubuntu. Caricare un file con carrierwave e poi provare a leggerlo con roo (una gemma per i file excel).

Errno::EACCES in IngestionController#upload 
Permission denied 

autorizzazioni siano state chmod-ed a 777 su quella directory e il file viene creato ok. Credo che i problemi riguardino la lettura del percorso del negozio.

excelx_file = params[:excel_file] 
filex = MetadataUploader.new 
filex.store!(excelx_file) 
workbook = Excelx.new("#{filex.store_path}") <- This is the actual line throwing the error. 

Sebbene tutto funzioni correttamente quando si esegue la stessa app sul mio mac.

+0

Nel mio caso è stato un problema con roo essere hones .. Ho spiegato tutto qui: http://stackoverflow.com/questions/11015448/errnoeacces-in-controllerupload-rails-roo-carrierwave-on-ubuntu/11023278# 11023278 – Hiromichan

2

Per quanto so che ci sono due cose che possono essere succedendo qui:

1) La directory che stai salvare le immagini per non dispone di privilegi di lettura/scrittura per altri utenti.

Per fissare:

terminale

$ cd [my_app] 
$ chmod -R 666 tmp 
$ chmod -R 666 public/uploads 

o se si sta salvando le immagini in una directory privata:

$ chmod -R 666 private/uploads 

stiamo usando 666 su 777. 666 consente di leggere e scrivere i privilegi in una directory e l'esigenza del vettore di scrivere le sue immagini. 777 consente i privilegi di lettura, scrittura e per i file eseguibili da eseguire! In altre parole, un programma brutto potrebbe essere caricato sul server travestito da un'immagine se si sta utilizzando 777. Anche se di carrierwave estensione white-list risolve questo problema, è necessario utilizzare sempre 666 su 777.

2) Non stai usando le stringhe con doppia quotatura nel metodo store_dir.

Per fissare:

app/example_uploader.rb

class BaseUploader < CarrierWave::Uploader::Base 
    # other methods removed for brevity 

    def store_dir 
    "#{Rails.root}/private/" # works perfectly. Many thanks to @RGB 
    end 

end 

Voglio solo sottolineare quanto sottile questo è. È necessario stringhe tra virgolette doppie e Rails.root! stavo facendo questo:

def store_dir 
    Rails.root + '/private' # raises Errno::EACCES error 
end 

e non funzionava affatto. Così sottile La comunità dovrebbe affrontare questo.

0

Dobbiamo concedere le autorizzazioni per accedere alla directory richiesta per l'utente root del sistema

sudo chmod 777 -R your_project_directory_to_be_access 

Per motivi di sicurezza, basta tenere a mente:

chmod 777 dà a tutti lettura, scrittura ed esecuzione dei diritti che per la maggior parte dei problemi è decisamente troppo.

Problemi correlati