Rails 3. getting Errno::EACCES Permission Denied when uploading files on production

前端 未结 4 1695
忘了有多久
忘了有多久 2020-12-10 05:15

The app works fine in development but in production I get Errno::EACCES Permission Denied error when I try to upload a file using Carrierwave. I\'m sure it has something to

相关标签:
4条回答
  • 2020-12-10 05:31

    As far as I know there are two things that can be going on here:

    1) The directory you're saving your images to doesn't have read/write privileges for other users.

    To fix:

    terminal

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

    or if you're saving your images in an private directory:

    $ chmod -R 666 private/uploads
    

    We're using 666 over 777. 666 allows read and write privileges to a directory, and carrierwave needs to write its images. 777 allows read, write privileges and for executable files to be executed! In other words, a nasty program could be uploaded to your server disguised as an image if you're using 777. Even though carrierwave's extension white-list solves this problem, you should always use 666 over 777.

    2) You're not using double quoted strings in the store_dir method.

    To fix:

    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
    

    Just want to point out how subtle this is. You need double quoted strings and Rails.root! I was doing this:

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

    and it was not working at all. So subtle. The community should address this.

    0 讨论(0)
  • 2020-12-10 05:32

    We need to grant permissions to access the required directory for the system root user

    sudo chmod 777 -R your_project_directory_to_be_access
    

    For security reasons, just keep in your mind:

    chmod 777 gives everybody read, write and execute rights which for most problems is definitively too much.

    0 讨论(0)
  • 2020-12-10 05:35

    Uhm I have been having the same issue with a ubuntu server. Uploading a file with carrierwave and then trying to read it with roo (a gem for excel files).

    Errno::EACCES in IngestionController#upload
    Permission denied
    

    Permissions have been chmod-ed to 777 on that directory and the file gets created ok. I believe the issues is when reading the store path.

    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.
    

    Although everything works ok when executing the same app on my mac.

    0 讨论(0)
  • 2020-12-10 05:50
    chmod -R 777 PATH_TO_APP/uploads 
    chmod -R 777 PATH_TO_APP/tmp 
    
    0 讨论(0)
提交回复
热议问题