0
我無法弄清楚爲什麼這不起作用。我需要調試幫助,我是Ruby on Rails的新手。調試幫助:Ruby on Rails S3和Carrierwave文件保存失敗
我想存儲一個簡單的s3文件到我的亞馬遜桶。而已。我不需要將此文件附加到控制器中的任何行,也不需要像所有示例所示那樣存儲在數據庫中。我只是需要它把它放在桶裏。我想我可能需要覆蓋頭像上傳器中的store_dir,但我不知道如何。
下面是我
的觀點:
= form_tag import_orders_path, :class => 'order-uploads', :multipart => true do
= file_field_tag 'upload[file]'
/:file for just getting param[:file] from server
%br
= submit_tag "Import CSV", :class => 'submit-file'
控制器:
uploader = AvatarUploader.new
puts YAML::dump(params[:upload][:file].path)
uploader.store!(params[:upload][:file])
文件路徑名:
/tmp/RackMultipart20150115-9225-o2c5hp
avatar.rb上傳
# encoding: utf-8
class AvatarUploader < CarrierWave::Uploader::Base
# Choose what kind of storage to use for this uploader:
storage :fog
# Override the directory where uploaded files will be stored.
# This is a sensible default for uploaders that are meant to be mounted:
def store_dir
"uploads/#{model.class.to_s.underscore}/#{mounted_as}/#{model.id}"
end
end
carrierwave.rb初始化
require 'fog'
require 'carrierwave'
CarrierWave.configure do |config|
config.fog_credentials = {
:provider => 'AWS', # required
:aws_access_key_id => 'my_key_id', # required
:aws_secret_access_key => 'my_secret_key', # required
:region => 'us-east-1', # optional, defaults to 'us-east-1'
}
config.fog_directory = "my_bucket"
end
錯誤:
NoMethodError (undefined method `id' for nil:NilClass):
app/uploaders/avatar_uploader.rb:16:in `store_dir'
app/controllers/orders_controller.rb:18:in `import'
NoMethodError (undefined method `id' for nil:NilClass):
app/uploaders/avatar_uploader.rb:16:in `store_dir'
app/controllers/orders_controller.rb:18:in `import'
你'store_dir'引用了一個模型,它的ID,解決這個問題,這應該消失 –