【问题标题】:errno::eacces: permission denied @ rb_sysopen when uploading jpgerrno::eacces: 上传 jpg 时权限被拒绝@rb_sysopen
【发布时间】:2020-12-17 05:03:26
【问题描述】:

我正在开发 Rails 应用程序,当我尝试将照片上传到服务器时遇到问题,显示错误消息。在日志文件中出现错误:“Errno::EACCES (Permission denied @ rb_sysopen - /photo.jpg”。问题发生在“File.open(...)”行

我的上传方式:

def upload_photo
    logger.info(params.to_s)
    logger.info(params[:file].to_s)
    photo = params[:file]
    filename = photo.instance_variable_get(:@headers).to_s.match(/filename="(.*)"/).captures[0]
        
    File.open("#{PHOTO_DIR}/#{photo.original_filename}",'wb') do |file|
        file.write(photo.read)
    end
            
    respond_to do |format|
        format.html {
            render :text => 'File uploaded.'
        }
    end
end

存储照片的文件夹的权限是“drw-rw-rw-”,所有者是我的用户,组也是我的用户。

我尝试通过使用 chown -R user:user /path/to/photos 收回所有权来解决此问题,但没有成功。

我该如何解决这个问题?

【问题讨论】:

  • 您确定PHOTO_DIR 常量设置正确吗?看起来您正在尝试从根目录打开文件,而不是从某个应用文件夹 (...rb_sysopen - /photo.jpg)

标签: ruby ruby-on-rails-4 file-upload


【解决方案1】:

问题在于 PHOTO_DIR 常量,因为它在 constants.rb 文件中设置为环境变量。

PHOTO_DIR = ENV['PHOTO']

当我使用目录的完整路径更改 env 变量时,一切都按预期工作。

PHOTO_DIR = '/path/to/jpg_files/'

看起来 env 变量未加载到 ~/.bashrc 文件中,但我尝试了 echo $PHOTO 并打印了照片的路径。

【讨论】:

    猜你喜欢
    • 2019-02-13
    • 1970-01-01
    • 2018-07-10
    • 2011-12-28
    • 2015-07-20
    • 2016-03-14
    • 2014-01-24
    • 1970-01-01
    • 2016-05-07
    相关资源
    最近更新 更多