Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/ruby-on-rails/54.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ruby on rails 如何通过carrierwave上传S3中的图像并将文件名保存在数据库中?_Ruby On Rails_Ruby_Upload_Carrierwave - Fatal编程技术网

Ruby on rails 如何通过carrierwave上传S3中的图像并将文件名保存在数据库中?

Ruby on rails 如何通过carrierwave上传S3中的图像并将文件名保存在数据库中?,ruby-on-rails,ruby,upload,carrierwave,Ruby On Rails,Ruby,Upload,Carrierwave,我尝试使用carrierwave和fog gem在s3中上传照片,但出现了错误 未定义的方法为nil:NilClass捕获'。 行内:if@premium.save` 在控制器/操作中创建 def create @premium = Article.new(premium_params) @premium.created_date = Time.now if @premium.save redirect_to admincp_premium_path(@premium.id)

我尝试使用carrierwave和fog gem在s3中上传照片,但出现了错误

未定义的方法
为nil:NilClass
捕获'。
行内:
if@premium.save` 在控制器/操作中创建

  def create
@premium = Article.new(premium_params)
@premium.created_date = Time.now
  if @premium.save
    redirect_to admincp_premium_path(@premium.id)
  else
    respond_to do |format|
     format.html { render :new }
     format.json { render json: @premium.errors, status: :unprocessable_entity }
    end
  end
结束

这是我的代码:

carrierwave.rb

    CarrierWave.configure do |config|
    config.fog_credentials = {
      :provider               => 'AWS',
      :aws_access_key_id      => ENV['S3_KEY'],
      :aws_secret_access_key  => ENV['S3_SECRET'],
      :region                => ENV['S3_REGION'],
       :path_style            => true
  }
  config.cache_dir = "#{Rails.root}/tmp/uploads"
  config.fog_directory  = ENV['S3_BUCKET']
end
在文章_controller.rb中

def create
@premium = Article.new(premium_params)
@premium.created_date = Time.now
  if @premium.save
    redirect_to admincp_premium_path(@premium.id)
  else
    respond_to do |format|
     format.html { render :new }
     format.json { render json: @premium.errors, status: :unprocessable_entity }
    end
  end
结束` 在模型artcle.rb中

Class Article < ActiveRecord::Base
   ...
   # set file upload image
  mount_uploader :image, ImageUploader
end.
类文章
谢谢你救了我的命

错误日志:

    Started POST "/admincp/premiums/new" for 127.0.0.1 at 2015-03-30 16:55:53 +0700
Processing by Admincp::PremiumsController#create as HTML
  Parameters: {"utf8"=>"✓", "authenticity_token"=>"m38F1BDY50lGd/oueT4swpawWueiOBBgOT/MK7xHX4q9aGchBjEc1UnX8UEsTvE+rEz+F3Le9Ru1zVusx7W3dQ==", "premium"=>{"title"=>"rwe", "url"=>"wewe", "start_date"=>"01-03-2015", "end_date"=>"11-03-2015", "image"=>#<ActionDispatch::Http::UploadedFile:0x007fd1b8d97c90 @tempfile=#<Tempfile:/tmp/RackMultipart20150330-11636-1pd05hk.jpg>, @original_filename="canh-dep-tai-nha-trang.jpg", @content_type="image/jpeg", @headers="Content-Disposition: form-data; name=\"premium[image]\"; filename=\"canh-dep-tai-nha-trang.jpg\"\r\nContent-Type: image/jpeg\r\n">, "number"=>"10"}, "commit"=>"登録"}
   (0.2ms)  BEGIN
  SQL (0.8ms)  INSERT INTO `article` (`title`, `url`, `image`, `start_date`, `end_date`, `number`, `created_date`) VALUES ('rwe', 'wewe', '1d5f0c8e-c41e-4eda-a379-b1b51430372a.jpg', '2015-03-01 00:00:00.000000', '2015-03-11 00:00:00.000000', 10, '2015-03-30 09:55:53.363046')
[fog][WARNING] fog: followed redirect to s3.amazonaws.com, connecting to the matching region will be more performant
   (549.1ms)  ROLLBACK
Completed 500 Internal Server Error in 7494ms

NoMethodError (undefined method `captures' for nil:NilClass):
  app/controllers/admincp/premiums_controller.rb:32:in `create'
于2015-03-30 16:55:53+0700为127.0.0.1开始发布“/admincp/premium/new”
Admincp处理::PremiumController#创建为HTML
参数:{“utf8”=>“✓", "真实性令牌“=>”m38F1BDY50lGd/oueT4swpawWueiOBBgOT/MK7xHX4q9aGchBjEc1UnX8UEsTvE+rEz+F3Le9Ru1zVusx7W3dQ=>”,“高级”=>{“标题”=>“rwe”,“url”=>“WEWEWE”,“开始日期”=>“01-03-2015”,“结束日期”=>“11-03-2015”,“图像”=>,“数字”=>“10”,“提交”=>”登録"}
(0.2ms)开始
SQL(0.8ms)插入到“文章”(“标题”、“url”、“图像”、“开始日期”、“结束日期”、“编号”、“创建日期”)中的值(“rwe”、“WEWEWE”、“1d5f0c8e-c41e-4eda-a379-b1b51430372a.jpg”、“2015-03-01 00:00.000000”、“2015-03-11 00:00:00.000000”、“10”、“2015-03-30 09:55:53.363046”)
[fog][警告]fog:随后重定向到s3.amazonaws.com,连接到匹配区域将更有效
(549.1ms)回滚
在7494ms内完成500个内部服务器错误
NoMethodError(未定义nil:NilClass的“捕获”方法):
app/controllers/admincp/premium\u controller.rb:32:in'create'

我也遇到了同样的问题。我可以通过调整我的CarrierWave
配置中的
:region
来解决这个问题


我使用S3的
美国标准
区域作为我的存储桶,并且我设置了
区域:“US-east-1”
,这是默认设置。当我以前在俄勒冈州
设置
区域时:“US-west-2”
起作用(该选项未在区域选项中列出)

@Sontya.是的。我更新了它。您能在“app/controllers/admincp/premium\u controller.rb:32”处显示代码吗?此代码是“if@premium.save”,用于创建