在生产中使用回形针插件进行导轨时的错误。图像未保存到服务器

时间:2011-01-13 20:06:47

标签: ruby-on-rails-3 paperclip

我正在运行rails 3和paperclip 2.3.4。在OS X的开发中,每件事情都运行得很好,但生产中存在一些我无法弄清楚的问题。如果有人有任何建议,请告诉我。

我使用Flash BTW上传文件。就像我说当地的发展很有效。

我检查了生产日志,看起来POST正好发生了。

Started POST "/addimage" for 10.0.136.119 at 2011-01-13 19:49:09 +0000
  Processing by BowlsController#create as HTML
  Parameters: {"Filename"=>"IMG_0585.JPG", "fbid"=>"123456789", "Filedata"=>#<ActionDispatch::Http::UploadedFile:0x000000054afdf8 @original_filename="IMG_0585.JPG", @content_type="application/octet-stream", @headers="Content-Disposition: form-data; name=\"Filedata\"; filename=\"IMG_0585.JPG\"\r\nContent-Type: application/octet-stream\r\n", @tempfile=#<File:/tmp/RackMultipart20110113-23741-bhze8q>>, "Upload"=>"Submit Query"}
Completed 200 OK in 64ms (Views: 0.4ms | ActiveRecord: 0.9ms)

以下是我正在调用的rails中的操作

def create
     @user = User.find_by_fbid(params[:fbid])

     if @user.nil?
       #create user and register if user does not exist
       @user = User.new( :fbid => params[:fbid] )
       @user.save
     end

    if params[:Filedata]
      @image = @user.images.build()
      @image.swfupload_file = params[:Filedata]

      if @image.save
        render :json => { :data => @image, :success => true }
      else
        render :json => { :info => "error", :success => false }
      end
    else
      @image = Image.new params[:img]
      if @image.save
        render :json => { :data => @bowl, :success => true }
      else
        render :json => { :info => "error", :success => false }
      end
    end
  end
end

基本上用户可以有很多图像,所以我必须确保用户存在。如果它们不存在,我首先创建一个新用户。

我还有另一种方法可以让我抓住用户上传的最后一张图片的路径,这也是生产中的错误。

  def last_img
    @user = User.find_by_fbid(params[:fbid])

    if @user.nil?
      render :json => { :error => "no bowls for this user" }
    else
      bowl = @user.images.first

      render :json => { :img_path => image.img.url}
    end
  end

我得到的错误如下 ImagesController#last_image

中的NoMethodError

未定义的方法`img'代表nil:NilClass

1 个答案:

答案 0 :(得分:0)

我觉得你的代码有点迷失。

如果它确实是您的实时代码的副本,则image.img可能会在#last_img中抛出异常,因为它可能未初始化(至少在您提供的代码中没有)。但它会引发一种不同的例外而不是零:NilClass

如果它是一个拼写错误并且你@image.img那么问题是相同的 - 你的控制器的工作流程是什么 - 如果它被调用那么它真的会抛出nil:NilClass因为没有@图片在#last_img

的代码中的任意位置初始化

还有一件事 - 你在那里初始化局部变量bowl而没有使用它?

最后一个,现在在#create - @bowl来自哪里?从提供的代码开始,它应始终为nil