2014-09-21 1 views
0

heroku 앱에서 surveys.json 또는 survey/: id.json을 쿼리 할 때 내가 500이라는 상태를 얻는 이유를 파악하는 데 어려움이 있습니다. 내가 무엇을 확인해야하는지, 또는 무엇이 문제인지에 대한 생각은 무엇입니까?문제 해결 Rails Heroku 500이 json 응답에서 오류가 발생했습니다.

내 첫 번째 직감은 아마도 heroku run rake db:migrate이 필요했지만 문제를 해결하지 못했을 것입니다. 나도 heroku run rake assets:clean/compile를 시험해 보았다. 그러나 어느 쪽도 도움이되지 않았다.

앱을 개발 중이거나 RAILS_ENV=production으로 실행하면 예상대로 작동하며 json 조사가 문제없이 반환됩니다.

그러나 내 설문 조사 jbuilder로 놀고 있었지만 그와 관련이 있다고 의심 스럽지만 dev/production에서 로컬로 잘 작동한다는 것은 이상한 일입니다.

또한 가치가 있습니다 - 나는 PG를 개발/테스트/프로덕션에서 실행 중이므로 Heroku와는 데이터베이스의 차이가 있다고 생각하지 않습니다. 그 조각을 제거하는 시도하고 그것은 여전히 ​​난 그렇게 (500)의 상태를 반환했습니다, 그러나

json.url survey_url(survey, format: :json) 
    json.responses survey.responses do |json, response| 
    json.extract! response, :id, :survey_id, :completed, :appuser_id, :created_at, :updated_at 
    appuser = response.appuser 
    json.extract! appuser, :state_code 
    json.extract! appuser, :age 
    json.extract! appuser, :gender 
    end 

:

json.array!(@surveys) do |survey| 
    json.extract! survey, :id, :title, :survey_limit, :status, :number_taken, :created_at, :updated_at, :created_date, :user_id 
    json.questions survey.questions do |json, question| 
    json.extract! question, :id, :title, :single_response, :randomize, :terminate, :free_text, :number_only, :min_number, :max_number, :demographic, :demographic_item, :question_number 
    json.answers question.answers do |json, answer| 
     json.title answer.title 
     json.id answer.id 
     json.next_question_id answer.next_question_id 
     json.free_text answer.free_text 
     json.branching answer.branching 
    end 
    end 
    json.url survey_url(survey, format: :json) 
    json.responses survey.responses do |json, response| 
    json.extract! response, :id, :survey_id, :completed, :appuser_id, :created_at, :updated_at 
    appuser = response.appuser 
    json.extract! appuser, :state_code 
    json.extract! appuser, :age 
    json.extract! appuser, :gender 
    end 
end 

어제 만든 변화가 추가되었다 :

여기 내 제이빌더 파일입니다 의심의 여지가 실제로 무슨 일이야.

킥의 경우 모델/컨트롤러를 추가하고 있습니다.

class SurveysController < ApplicationController 
    before_action :set_survey, only: [:show, :fetch, :edit, :update, :destroy] 

    # GET /surveys 
    # GET /surveys.json 
    def index 
    if !cookies[:appuser_token] 
     appuser = Appuser.create 
     sign_in_appuser appuser 
    else 
     appuser = current_appuser 
    end 
    @surveys = Survey.where(user_id: cookies[:user_id]) 
    end 

    # GET /surveys/1 
    # GET /surveys/1.json 
    def show 
    if !cookies[:appuser_token] 
     appuser = Appuser.create 
     sign_in_appuser appuser 
    else 
     appuser = current_appuser 
    end 

    respond_to do |format| 
     format.json 
     format.csv { send_data @survey.to_csv } 
     format.xlsx 
    end 
    end 

    def fetch 
    respond_to do |format| 
     format.json 
    end 
    end 

    # GET /surveys/new 
    def new 
    unless signed_in? 
     redirect_to signin_path 
    end 
    @survey = Survey.new 
    end 

    # GET /surveys/1/edit 
    def edit 
    end 

    # POST /surveys 
    # POST /surveys.json 
    def create 
    unless signed_in? 
     redirect_to signin_path 
    end 
    @survey = Survey.new(survey_params) 

    respond_to do |format| 
     if @survey.save 
     if @survey.status == "Submitted" 
      SurveyMailer.survey_created(@survey).deliver 
     end 
     format.html { redirect_to @survey, notice: 'Survey was successfully created.' } 
     format.json { render action: 'show', status: :created, location: @survey } 
     else 
     format.html { render action: 'new' } 
     format.json { render json: @survey.errors, status: :unprocessable_entity } 
     end 
    end 
    end 

    # PATCH/PUT /surveys/1 
    # PATCH/PUT /surveys/1.json 
    def update 
    unless signed_in? 
     redirect_to signin_path 
    end 
    respond_to do |format| 
     if @survey.update(survey_params) 
     if @survey.status == "Submitted" 
      SurveyMailer.survey_created(@survey).deliver 
     end 
     format.html { redirect_to @survey, notice: 'Survey was successfully updated.' } 
     format.json { head :no_content } 
     else 
     format.html { render action: 'edit' } 
     format.json { render json: @survey.errors, status: :unprocessable_entity } 
     end 
    end 
    end 

    # DELETE /surveys/1 
    # DELETE /surveys/1.json 
    def destroy 
    unless signed_in? 
     redirect_to signin_path 
    end 
    @survey.destroy 
    respond_to do |format| 
     format.html { redirect_to surveys_url } 
     format.json { head :no_content } 
    end 
    end 

    private 
    # Use callbacks to share common setup or constraints between actions. 
    def set_survey 
     @survey = Survey.find(params[:id]) 
    end 

    # Never trust parameters from the scary internet, only allow the white list through. 
    def survey_params 
     params.require(:survey).permit(:number_taken, :survey_limit, :title, :status, :user_id) 
    end 
end 

모델 :

class Survey < ActiveRecord::Base 
    has_many :questions 
    has_many :responses 
    belongs_to :user 
    validates_presence_of :title 

    def created_date 
     "#{created_at}".to_date 
    end 

    def complete_survey 
     num = number_taken + 1 
     update_attributes(number_taken: num) 
     if (number_taken >= survey_limit) 
      update_attributes(status: "Completed") 
     end 
    end 

    def to_csv(options = {}) 
     question_titles = questions.map { |r| r.title } 
     CSV.generate(options) do |csv| 
      csv << question_titles 
      responses.each do |response| 
       csv_row = [] 
       choice_array = [] 
       questions.each do |question| 
        csv_cell = "" 
        choices = Choice.where(question_id: question.id, response_id: response.id) 
        if !question.single_response 
         choices.each do |choice| 
          csv_cell = csv_cell + "|" unless csv_cell == "" 
          answer = Answer.find(choice.answer_id) 
          if answer.free_text 
           title = choice.free_text_response 
           csv_cell = csv_cell + title 
          else 
           index = question.answers.find_index answer 
           title = Answer.find(choice.answer_id).title 
           csv_cell = csv_cell + index.to_s + "|" + title 
          end 
         end 
        else 
         choices.each do |choice| 
          csv_cell = csv_cell + "|" unless csv_cell == "" 
          answer = Answer.find(choice.answer_id) 
          if answer.free_text 
           title = choice.free_text_response 
           csv_cell = csv_cell + title 
          else 
           index = question.answers.find_index answer 
           title = Answer.find(choice.answer_id).title 
           csv_cell = index.to_s + "|" + title 
          end 
         end 
        end 

        csv_row << csv_cell 
       end 
       csv << csv_row 
      end 
     end    
    end 
end 

편집 내 Heroku가 로그인 추가는

←[36m2014-09-21T14:38:42.114954+00:00 heroku[router]:←[0m at=info method=GET pat 
h="/surveys" host=example.herokuapp.com request_id=63cb25e9-a153-4028-9233- 
707f609ae9e4 fwd="71.217.213.199" dyno=web.1 connect=118ms service=1282ms status 
=500 bytes=375 
←[36m2014-09-21T14:40:46.090422+00:00 heroku[router]:←[0m at=info method=HEAD pa 
th="/" host=example.herokuapp.com request_id=1cb4f5fc-24f4-4314-bdcd-1867f7 
0e4e46 fwd="74.86.158.106" dyno=web.1 connect=279ms service=439ms status=200 byt 
es=936 
←[36m2014-09-21T14:43:30.614544+00:00 heroku[router]:←[0m at=info method=GET pat 
h="/" host=example.herokuapp.com request_id=c47a6941-5fa1-47de-b036-995fa0c 
5b70c fwd="54.166.22.65" dyno=web.1 connect=3ms service=7ms status=301 bytes=229 

←[36m2014-09-21T14:45:45.404793+00:00 heroku[router]:←[0m at=info method=HEAD pa 
th="/" host=example.herokuapp.com request_id=6fcdc0b6-05e2-4193-aaef-ff3b3e 
3c03f3 fwd="74.86.158.106" dyno=web.1 connect=3ms service=15ms status=200 bytes= 
936 
←[36m2014-09-21T14:47:22.149479+00:00 heroku[router]:←[0m at=info method=GET pat 
h="/surveys" host=example.herokuapp.com request_id=0a53ed27-8ac8-47bd-9a85- 
5028832f6662 fwd="71.217.213.199" dyno=web.1 connect=2ms service=33ms status=200 
bytes=1684 
←[36m2014-09-21T14:47:22.462054+00:00 heroku[router]:←[0m at=info method=GET pat 
h="/assets/application-c2d8e61338c9783113ef91c7e33789ae.js" host=example.he 
rokuapp.com request_id=fbeeaa36-c871-483e-9071-87ba87fccc75 fwd="71.217.213.199" 
dyno=web.1 connect=1ms service=5ms status=304 bytes=276 
←[36m2014-09-21T14:47:22.454225+00:00 heroku[router]:←[0m at=info method=GET pat 
h="/assets/application-795c0ab8f1ce18d00247c018b9b1fe37.css" host=example.h 
erokuapp.com request_id=c593279b-879b-44c6-8f46-46bba176bbee fwd="71.217.213.199 
" dyno=web.1 connect=3ms service=5ms status=304 bytes=276 
←[36m2014-09-21T14:47:22.780301+00:00 heroku[router]:←[0m at=info method=GET pat 
h="/assets/fontawesome-webfont-b83782d932b98da1712aaebe1028fa9d.woff?v=4.2.0" ho 
st=example.herokuapp.com request_id=668d68c7-0430-419f-8961-9d00327dd4a1 fw 
d="71.217.213.199" dyno=web.1 connect=0ms service=43ms status=304 bytes=276 
←[36m2014-09-21T14:47:22.776478+00:00 heroku[router]:←[0m at=info method=GET pat 
h="/surveys" host=example.herokuapp.com request_id=16060ffb-7f35-4b25-ae64- 
9c20224f9a3c fwd="71.217.213.199" dyno=web.1 connect=1ms service=51ms status=500 
bytes=375 

JSON 응답 (마지막 줄은 상태 (500)의 예입니다) :

{"status":"500","error":"Internal Server Error"} 

또한 브라우저 캐시를 지우려고했지만 문제가 해결되지 않은 것으로 보입니다.

+0

heroku 로그를 확인 했습니까? –

+0

그래, GET surveys.json과 500이라는 상태가 꽤 많이 나온다. –

+0

로그에서 관련 라인을 게시 할 수 있습니까? –

답변

1

jbuilder가 500 오류를 발생시키는 것으로 보입니다. 루비 코드에 오류가있는 경우 로그에서 stacktrace를 얻었을 것입니다.

this을 살펴보십시오. 희망이 도움이됩니다.

관련 문제