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"}
또한 브라우저 캐시를 지우려고했지만 문제가 해결되지 않은 것으로 보입니다.
heroku 로그를 확인 했습니까? –
그래, GET surveys.json과 500이라는 상태가 꽤 많이 나온다. –
로그에서 관련 라인을 게시 할 수 있습니까? –