gpt4 book ai didi

ruby-on-rails - SystemStackError(堆栈级别太深)

转载 作者:行者123 更新时间:2023-12-04 15:26:33 25 4
gpt4 key购买 nike

我正在开发一个 android 应用程序,我需要有一个关于已保存对象的显示 View 的 json 响应。尝试这样做,我收到:

"SystemStackError (stack level too deep)"
app/controllers/segnalaziones_controller.rb:74:in `create'
app/controllers/segnalaziones_controller.rb:58:in `create'

这是“Segnalazione” Controller
include Gft

class SegnalazionesController < ApplicationController

load_and_authorize_resource
respond_to :json
# GET /segnalaziones
# GET /segnalaziones.xml
# before_filter :authorize

def index
@segnalaziones = Segnalazione.order(:dataspedizione)
respond_to do |format|
format.html # index.html.erb
format.xml { render :xml => @segnalaziones }
format.json { render :json => @segnalaziones }
end
end

# GET /segnalaziones/1
# GET /segnalaziones/1.xml
def show
@segnalazione = Segnalazione.find(params[:id])
respond_to do |format|
format.html # show.html.erb
format.xml { render :xml => @segnalazione }
format.json { render :json => @segnalazione }
end
end

# GET /segnalaziones/new
# GET /segnalaziones/new.xml
def new
@segnalazione = Segnalazione.new
respond_to do |format|
format.html # new.html.erb
format.xml { render :xml => @segnalazione }
format.json { render :json => @segnalazione }
end
end

# GET /segnalaziones/1/edit
def edit
@segnalazione = Segnalazione.find(params[:id])

end

# POST /segnalaziones
# POST /segnalaziones.xml
def create
@segnalazione = Segnalazione.new(params[:segnalazione])
@user = User.find_by_id(session[:user_id])
@username = session[:user_name]
@segnalazione.user = session[:user_id]
@segnalazione.dataspedizione = Time.zone.now
@user.last_request_at = Time.zone.now
@user.save
respond_to do |format|
if @segnalazione.save
Gft.spedisci(
@segnalazione.id,
@username,
@segnalazione.mood,
@segnalazione.dove,
@segnalazione.via,
@segnalazione.dataspedizione,
@segnalazione.descrizione,
@segnalazione.immagine.url,
@segnalazione.categoria1,
@segnalazione.categoria2,
@segnalazione.categoria3)
format.html { redirect_to(@segnalazione, :notice => 'Segnalazione creata, verrà visualizzata su mappa fra qualche attimo') }
format.xml { render :xml => @segnalazione, :status => :created, :location => @segnalazione }
format.json { render :json => @segnalazione, :status => :created, :location => @segnalazione }

else
format.html { render :action => "new" }
format.xml { render :xml => @segnalazione.errors, :status => :unprocessable_entity }
format.json { render :json => @segnalazione.errors, :status => :unprocessable_entity }
end
end
end

# PUT /segnalaziones/1
# PUT /segnalaziones/1.xml
def update
@username = session[:user_name]
@segnalazione = Segnalazione.find(params[:id])
respond_to do |format|
if @segnalazione.update_attributes(params[:segnalazione])
Gft.aggiorna(
@segnalazione.id,
@username,
@segnalazione.mood,
@segnalazione.dove,
@segnalazione.via,
@segnalazione.dataspedizione,
@segnalazione.datarisoluzione,
@segnalazione.descrizione,
@segnalazione.immagine.url,
@segnalazione.categoria1,
@segnalazione.categoria2,
@segnalazione.categoria3)
format.html { redirect_to(@segnalazione, :notice => 'Segnalazione aggiornata') }
format.xml { head :ok }
else
format.html { render :action => "edit" }
format.xml { render :xml => @segnalazione.errors, :status => :unprocessable_entity }
end
end
end

# DELETE /segnalaziones/1
# DELETE /segnalaziones/1.xml
def destroy
@segnalazione = Segnalazione.find(params[:id])
@segnalazione.destroy
Gft.elimina(@segnalazione.id)
respond_to do |format|
format.html { redirect_to(admin_url) }
format.xml { head :ok }
end
end

def eliminadatarisoluzione
@segnalazione.datarisoluzione = nil
end
end

如果我“localhost:3000/segnalaziones/2?format=xml”,则显示 xml。

如果我 "localhost:3000/segnalaziones/2?format=json"我再次收到错误页面(堆栈级别太深......)

我试过这个解决方案,这不起作用:

http://dalibornasevic.com/posts/5-ruby-stack-level-too-deep-systemstackerror

解决方案:

代替:
 format.json  { render :json => @segnalazione, :status => :created, :location => @segnalazione }

我用过
 format.json  { render :json => @segnalazione.as_json(:only => [:user, :categoria1, :categoria2, :categoria3, :descrizione, :dove, :via]), :status => :created, :location => @segnalazione }

帮助在此处找到: http://jonathanjulian.com/2010/04/rails-to_json-or-as_json/

最佳答案

这就是堆栈溢出问题。您可以查看堆栈大小 here在各种平台上。

ulimit 在允许此类控制的系统上,该命令基本上提供对 shell 可用资源和由它启动的进程的控制。

您可以使用“ulimit -a”查看当前限制:

[mrblack@ /]# ulimit -a
core file size (blocks, -c) 0
data seg size (kbytes, -d) unlimited
scheduling priority (-e) 0
file size (blocks, -f) unlimited
pending signals (-i) 15910
max locked memory (kbytes, -l) 64
max memory size (kbytes, -m) unlimited
open files (-n) 1024
pipe size (512 bytes, -p) 8
POSIX message queues (bytes, -q) 819200
real-time priority (-r) 0
stack size (kbytes, -s) 8192
cpu time (seconds, -t) unlimited
max user processes (-u) 1024
virtual memory (kbytes, -v) unlimited
file locks (-x) unlimited

并且,您可以使用 更改堆栈大小。 'ulimit -s' 命令。

ulimit -s 32768 # sets the stack size to 32M bytes

关于ruby-on-rails - SystemStackError(堆栈级别太深),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6517848/

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