Carrierwave仅在Production-env

时间:2015-05-29 13:00:51

标签: ruby-on-rails capistrano carrierwave

花了整整一天试图让这个工作。在开发/本地计算机上运行时,Carrierwaves和我的文件上载工作正常,但是当我使用ENV在我的服务器上进行尝试时:通过Capistrano进行生产和部署,文件只会保存在uploads / tmp /中,而不是像我的image_uploader中所述。

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

当我搜索时,我尝试了几件事,但没有解决这个问题。

此外,我的表格/帖子没有转发我,但我和我上传的页面保持一致,这在开发/本地时不会发生。

以下是我认为可以解决问题的deploy.rb的一些部分:

set :linked_dirs, fetch(:linked_dirs) + %w{public/uploads}

task :symlink_uploads do run "ln -nfs #{shared_path}/uploads #{release_path}/public/uploads" end

 after :restart, :seed_roles, :symlink_uploads 

编辑问题: 我是否必须将从tmp上传的图片移动到我希望存储的位置?

1 个答案:

答案 0 :(得分:0)

请执行以下操作

并在设置中

<强>配置/初始化/ carrierwave.rb

CarrierWave.configure do |config|
  config.root = Rails.root
end

https://github.com/carrierwaveuploader/carrierwave/wiki/how-to:-secure-upload

此处您无需更改store_dir

如果要更改随机十六进制文件名

https://github.com/carrierwaveuploader/carrierwave/wiki/How-to:-Create-random-and-unique-filenames-for-all-versioned-files

将以下代码放入上传器中

def filename
     "#{secure_token(10)}.#{file.extension}" if original_filename.present?
  end

  protected
  def secure_token(length=16)
    var = :"@#{mounted_as}_secure_token"
    model.instance_variable_get(var) or model.instance_variable_set(var, SecureRandom.hex(length/2))
  end

希望它能解决问题