Ошибки при использовании плагина скрепки для рельсов в производстве.Изображение не сохраняется на сервер - PullRequest
1 голос
/ 13 января 2011

У меня бегут рельсы 3 и скрепка 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)

Вот действие в рельсах, которое я называю

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

ошибка, которую я получаю за это следующее NoMethodError в ImagesController # last_image

неопределенный метод img для nil: NilClass

1 Ответ

0 голосов
/ 14 января 2011

Я чувствую себя немного потерянным с вашим кодом.

Если это действительно копия вашего живого кода, то image.img, вероятно, выдаст исключение в #last_img, потому что оно, вероятно, не инициализировано (по крайней мере, не в предоставленном вами коде). Но это вызвало бы исключение другого типа, а не ноль: NilClass

В случае, если это опечатка, и вы @image.img, тогда возникает тот же вопрос - каков рабочий процесс вашего контроллера - если он называется так, как есть, то он действительно выдаст nil: NilClass, потому что не инициализирован @image в любом месте кода #last_img

И еще одна вещь - вы инициализируете локальную переменную bowl там, и вы ей не пользуетесь?

И последний, теперь в #create - откуда появился @bowl? Из предоставленного кода всегда должно быть nil.

...