更改Carrierwave上传路径以适应Cloud 66的配置

Bar*_*acs 3 ruby deployment ruby-on-rails carrierwave cloud66

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

 Errno::EACCES (Permission denied - /var/deploy/anabol/web_head/releases/20130608104347/public/uploads/tmp): 
Run Code Online (Sandbox Code Playgroud)

image_uploader.rb

class ImageUploader < CarrierWave::Uploader::Base
...
  def store_dir
    "uploads/#{model.class.to_s.underscore}/#{mounted_as}/#{model.id}"
  end
...
end
Run Code Online (Sandbox Code Playgroud)

有一个描述,如何解决这里的问题: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
Run Code Online (Sandbox Code Playgroud)

但它没有帮助.我仍然收到此错误:

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

我错过了什么吗?

编辑:

上传适用于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
Run Code Online (Sandbox Code Playgroud)

但现在我得到:

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"):
Run Code Online (Sandbox Code Playgroud)

在视图上,仅显示图像路径.

Bar*_*acs 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
Run Code Online (Sandbox Code Playgroud)

而最好的解决方案

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

  def store_dir
    "system/#{model.class.to_s.underscore}/#{mounted_as}/#{model.id}"
  end
Run Code Online (Sandbox Code Playgroud)