花了一整天的时间让这个工作。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
希望这能解决问题