花了整整一天试图让这个工作。在开发/本地计算机上运行时,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上传的图片移动到我希望存储的位置?
答案 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
如果要更改随机十六进制文件名
将以下代码放入上传器中
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
希望它能解决问题