Rails – Errno :: EACCES(权限被拒绝)上传用户的头像时

我有:

  • Heroku的
  • 铁轨3
  • carrierwave

在localhost上传工作正常。 但它不适用于heroku。 我的日志是:

Completed 500 Internal Server Error in 13ms Errno::EACCES (Permission denied - /app/public/uploads/tmp): app/controllers/users_controller.rb:73:in `update' cache: [POST /users/2] invalidate, pass 

我的73行是:

 if @user.update_attributes(params[:user]) 

尝试制作本地计算机并推送到heroku并失败

我还可以做些什么?

您无法在Heroku的服务器上存储文件,因此上传并尝试将文件保存到本地文件系统将无法正常工作。

相反,您应该将文件上传到S3。 Heroku文档和CarrierWave文档都有关于配置CarrierWave以通过雾将文件上传到S3的信息。 查看文档,获取S3帐户,然后在那里上传文件。

当您推送到Heroku时,您的应用程序被编译成一个在只读文件系统上运行的slug – 因此您无法写入任何内容(即您甚至无法写入您自己的应用程序的public目录)。 要使Carrierwave在Heroku上运行 ,必须在Uploader类中设置cache_dir 。 看看这个答案 ,特别是评论说“这两行固定它”:

 config.root = Rails.root.join('tmp') config.cache_dir = 'carrierwave'