2012-06-11 46 views
2

我想在一個Rails 3.2應用程序上設置jquery文件上傳,在guide之後。如何調試一個POST 500內部服務器錯誤

一切幾乎是可以正常使用,當我點擊「開始上傳」我在Chrome中看到的控制檯錯誤:

POST http://testapp.dev/photos 500 (Internal Server Error) 

在日誌中我得到:

ActionView::MissingTemplate (Missing template photos/create, application/create with {:locale=>[:en], :formats=>[:js, :html], :handlers=>[:erb, :builder, :coffee]}. 

我已經通過控制器用一個細齒梳,但我無法弄清楚是什麼導致這個錯誤或爲什麼它尋找一個創建部分。什麼是調試這個系統的方法?

感謝

編輯

我控制器操作是這樣的:

class PhotosController < ApplicationController 

    def index 

    @photos = Photo.all 
    respond_to do |format| 
     format.html # index.html.erb 
     format.xml { render :xml => @photos } 
     format.json { render :json => @photos.collect { |a| a.to_jq_upload }.to_json } 
     format.js { render :json => @photos.collect { |a| a.to_jq_upload }.to_json } 
    end 
    end 

    def show 
    @photo = Photo.find(params[:id]) 

    respond_to do |format| 
     format.html # show.html.erb 
     format.xml { render :xml => @photo } 
     format.json { render :json => @photo } 
     format.js 
    end 
    end 

    def new 
    @photo = Photo.new 

    respond_to do |format| 
     format.html # new.html.erb 
     format.xml { render :xml => @photo } 
     format.json { render :json => @photo } 
     format.js 
    end 
    end 


    def edit 
    @photo = Photo.find(params[:id]) 

    end 

    def create 
    @photo = Photo.new(params[:photo]) 

    respond_to do |format| 
     if @photo.save 
     format.html { 
        render :json => [@photo.to_jq_upload].to_json, 
        :content_type => 'text/html', 
        :layout => false 
       } 
     format.json { render :json => [ @photo.to_jq_upload].to_json } 
     format.js 

     else 
     format.html { render :action => "new" } 
     format.xml { render :xml => @photo.errors, :status => :unprocessable_entity } 
     format.json { render :json => [ {:error => "An error was encountered while processing your photos. Please try again."}], status: 304 } 
     format.js 
     end  
    end 
    end 



     def update 
    @photo = Photo.find(params[:id]) 

    respond_to do |format| 
     if @photo.update_attributes(params[:photo]) 
     format.html { redirect_to(@photo, :notice => 'Asset was successfully updated.') } 
     format.xml { head :ok } 
     format.json { head :ok } 
     else 
     format.html { render :action => "edit" } 
     format.xml { render :xml => @photo.errors, :status => :unprocessable_entity } 
     format.json { render json: @photo.errors, status: :unprocessable_entity } 
     end 
    end 
    end 

    # DELETE /assets/1 
    # DELETE /assets/1.xml 
    def destroy 
    @photo = Photo.find(params[:id]) 
    @photo.destroy 

    respond_to do |format| 
     format.html { redirect_to(photos_url) } 
     format.xml { head :ok } 
     format.json { render :json => true } 
     format.js 
    end 
    end 
    end 
+0

應用程序日誌中的任何內容? – Stefan

+0

您是否檢查過您的應用程序的日誌?我不知道你的生產類型。在heroku上是'heroku logs'或'heroku logs -n 500'來檢索500行。 – jdoe

+0

是的,我得到'ActionView :: MissingTemplate(缺少模板照片/創建,應用程序/創建與{:語言環境=> [:恩],:格式=> [:js,:html],:handlers => [ :。爲什麼它尋找一個創建的部分? –

回答

7

它看起來像respond_to塊擊中format.js這將試圖呈現一個模板(默認如果沒有選項提供)。

因爲jQuery的文件上傳插件,您正在使用需要一個特定的JSON響應,有respond_to塊似乎沒有必要,你可以用下面的

def create 
    @photo = Photo.new(params[:photo]) 

    if @photo.save 
     render :json => [ @photo.to_jq_upload].to_json 
    else 
     render :json => [{ :error => "An error was encountered while processing your photos. Please try again." }], :status => 304 
    end  
end 

脫身我也強烈建議debugger它可以讓你在應用程序中設置斷點,這樣你就可以更好地說出發生了什麼。

要添加debugger寶石,您需要先將寶石添加到您的Gemfile並從命令行運行bundle install。接下來,您只需在要設置斷點的代碼行上添加單詞debugger。在你的情況,你可以做

def create 
    @photo = Photo.new(params[:photo]) 
    debugger 

    if @photo.save 
    # ... rest of code 

最後,你需要用--debugger選項重新啓動服務器。當jQuery-file-upload插件向服務器發送請求時,它會觸發斷點,您可以更好地分析傳遞的參數以及逐步瞭解代碼,以瞭解發生的情況。乾杯。

+1

您先生是男人! +1的答案。如果可以的話,+1給我的工具來自己解決這個問題。謝謝,我一直在困惑這幾天。 –

+1

很高興聽到。快樂編碼! –