ruby on rails - Carrierwave只在Production-env中将映像保存为tmp



花了一整天的时间让这个工作。Carrierwaves和我的fileuploads在开发/本地计算机上工作得很好,但是当在我的服务器上使用ENV:生产和通过Capistrano部署时,文件只保存在uploads/tmp/中,而不是我的image_uploader中所述。

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

我已经尝试了一些事情建议当我搜索,但没有解决这个问题。

此外,我的表单/帖子不转发我,但我留在我上传的同一页面,这不会发生在开发/本地。

这是我的部分部署。我认为可以解决这个问题:

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上传到我想要存储的地方?

请按以下步骤操作

和在设置

配置初始化/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

希望这能解决问题

最新更新