3

使用 Cloud 66 将 rails 应用程序部署到 digitalocean.com。一切正常,除了尝试上传图片时出现一些权限错误。

 Errno::EACCES (Permission denied - /var/deploy/anabol/web_head/releases/20130608104347/public/uploads/tmp): 

image_uploader.rb

class ImageUploader < CarrierWave::Uploader::Base
...
  def store_dir
    "uploads/#{model.class.to_s.underscore}/#{mounted_as}/#{model.id}"
  end
...
end

这里有描述,如何解决问题: https ://www.cloud66.com/help/permission_denied_errors

我将 store_dir 路径更改为:

  def store_dir
    "#{Rails.root}/tmp/#{model.class.to_s.underscore}/#{mounted_as}/#{model.id}"
  end

但这没有帮助。我仍然收到此错误:

 » 13:49:25.696 Errno::EACCES (Permission denied - /var/deploy/anabol/web_head/releases/20130608114659/public/uploads/tmp): 

我错过了什么吗?

编辑:

上传适用于 image_uploader.rb 中的这一部分:

  def cache_dir
    # should return path to cache dir
    Rails.root.join 'tmp/uploads/cache'
  end

  def store_dir
    "#{Rails.root}/tmp/uploads/#{model.class.to_s.underscore}/#{mounted_as}/#{model.id}"
  end

但现在我得到:

ActionController::RoutingError (No route matches [GET] "/var/deploy/anabol/web_head/releases/20130608164223/tmp/uploads/profile/image/3/thumb_Screenshot_from_2013-06-05_17_27_54.png"):

在视图中,仅显示图像路径。

4

2 回答 2

7

在您可以上传文件的主机上,有多种方法可以使其正常工作。这里描述了两种方法,但有一些错误,现已更正。: https ://www.cloud66.com/help/permission_denied_errors

一个部署钩子的工作示例,使用carrierwave进行图像上传:

#! /bin/bash
#load environment variables
source /var/.cloud66_env
#assign desired permissions
sudo chmod 0777 -R $RAILS_STACK_PATH/public/uploads

和最好的解决方案

(这样你在重新部署时不会丢失图像):在你的xy_uploader.rb中使用它:

  def store_dir
    "system/#{model.class.to_s.underscore}/#{mounted_as}/#{model.id}"
  end
于 2013-06-09T10:44:11.347 回答
1

我检查了 Cloud66:

此用户 (nginx) 没有提升的权限,也没有对您的文件系统的写入权限(除非明确写入 /tmp 和 $RAILS_STACK_PATH/tmp 文件夹)

这意味着您无法将稍后使用的文件上传到 Cloud66——您需要将 Fog 配置为上传到 S3(或任何雾的云文件提供程序)。

这在云提供商中是相当标准的。教程:

于 2013-06-08T13:04:17.053 回答