2011-06-29 59 views
5

我正在開發一個android應用程序,我需要有關於保存對象的show view的json響應。嘗試,我得到:SystemStackError(堆棧級別太深)

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

這裏是 「Segnalazione」 控制器

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 

如果我 「本地主機:3000/segnalaziones/2格式= xml」 的,則XML被顯示。

如果我「本地主機:3000/segnalaziones/2格式= JSON」我再次收到錯誤頁面(堆棧級別太深......)

我試過這個解決方案,不工作:

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

SOLUTION:

相反的:

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/

+1

+1對堆棧溢出堆棧溢出問題 –

回答

5

這是堆棧溢出問題。您可以在各種平臺上檢查堆棧大小here

ulimit命令這基本上提供了可用於外殼並通過它開始處理資源的控制,在允許這樣的控制系統。

你可以看到 '的ulimit -a' 當前限制:

[[email protected] /]# 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#設置堆棧大小32M字節

相關問題