gpt4 book ai didi

ruby-on-rails - 如何调试 POST 500 内部服务器错误

转载 作者:行者123 更新时间:2023-12-02 07:41:17 25 4
gpt4 key购买 nike

我正在尝试在 Rails 3.2 应用程序上设置 jquery 文件上传,遵循此 guide .

一切都几乎完美地工作但是,当我点击“开始上传”时,我在 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]}.

我已经仔细检查了 Controller ,但我无法弄清楚是什么导致了这个错误,也不知道它为什么要寻找创建部分。调试它的系统方法是什么?

谢谢

编辑

我的 Controller Action 是这样的:

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

最佳答案

看起来 respond_to block 正在访问 format.js,它将尝试呈现模板(如果未提供选项,则为默认设置)。

因为您正在使用的 jQuery-file-upload 插件需要一个特定的 JSON 响应,所以有一个 respond_to block 似乎是不必要的,您可以通过以下方式逃脱

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 gem,它允许您在应用程序中设置断点,以便您可以更好地了解正在发生的事情。

要添加 debugger gem,您需要先将 gem 添加到您的 Gemfile 并从命令运行 bundle install线。接下来,您只需在要设置断点的代码行上添加单词 debugger。在你的情况下,你可以做

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

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

最后,您需要使用 --debugger 选项重新启动服务器。当 jQuery-file-upload 插件向服务器发送请求时,它会到达断点,您可以更好地分析传递的参数并单步执行代码以了解发生了什么。干杯。

关于ruby-on-rails - 如何调试 POST 500 内部服务器错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10976912/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com