logger를 사용하여 롤백의 원인을 탐색합니다

7308 단어 RubyRails
최근에 또 개인 개발을 시작했는데 갑자기 넘어져서 기록해 두었다.
제 개인적인 일이지만 앞으로는 흑운 디버깅을 하지 않겠습니다. 논리적인 디버깅에 주의하겠습니다.

생각지도 못한 곳에 신경을 쓰다


rails new로 모형, 컨트롤러, 보기 코드를 써서 한번 돌려보고 싶어요.
느낌은 아래와 같다...
#ターミナルのサーバ内
Processing by ExampleController#create as HTML
  Parameters: {"utf8"=>"✓", "authenticity_token"=>"umwE5o2eXGoMi5vGD5BSPC0JsgkHC49680F+3cgaTxC5zukRZgdqly74jDLxL2tVXvswe0R73cATK90pgShOPg==", "example"=>{"name"=>"example", "place"=>"東京", "introduction"=>"面白い", "movie"=>"example"}, "commit"=>"Create Example"}
   (3.0ms)  begin transaction
   (0.3ms)  rollback transaction
Redirected to http://localhost:5000/example/new

롤백에 걸렸어...
복잡한 코드는 안 썼는데 왜 그런지 전혀 모르겠어요...
찾아보니 logger가 해결할 수 있을 것 같아서 공부했어요.

대략적인logger는 무엇입니까?


logger란 이름에 따라 그 결과에 도달한 기록을 토해내는 기능이다.
기본적으로 서버 뒷면에서 처리된 보이지 않는 것은 반드시 밖에서 보아야 한다
왜 그 결과가 됐는지 쫓아다니기 쉬워.이번에 말하자면, 왜 롤백이야?그러게 말이야.

구체적인logger 코드


이 해결 방법의 logger 코드는 다음과 같습니다.
example_controller.rb
logger.debug インスタンス変数.errors.inspect

#例
@example = Example.create(name :"abc")
logger.debug @example.errors.inspect

주의해야 할 것은 갑자기 이걸 사용할 수 있는 곳이 아니라 세트가 있는 곳도 컨트롤러가 아니라 컨트롤러다.

로고를 사용할 수 있도록 준비.


갑자기 Logger를 사용할 수 없으므로 준비해야 합니다.
config/application.rb
require_relative 'boot'

require 'rails/all'



# Require the gems listed in Gemfile, including any gems
# you've limited to :test, :development, or :production.
Bundler.require(*Rails.groups)

module サービス名
  class Application < Rails::Application
    # Initialize configuration defaults for originally generated Rails version.
    config.load_defaults 5.1
###この1行が必要
    config.logger = Logger.new(STDOUT)
###
    # Settings in config/environments/* take precedence over those specified here.
    # Application configuration should go into files in config/initializers
    # -- all .rb files in that directory are automatically loaded.
  end
end
상술한 코드에서 말한 바와 같이 응용 프로그램.rb에서 config.logger = Logger.새 (stdOUT)를 추가해야 합니다.
그나저나 class Application
config의 오류 이미지가 없습니다.
상기 코드를 추가하면logger를 사용할 수 있습니다.

구체적인 오류 원인 검색 방법


이번은transaction의 오류이기 때문에create 방법으로post를 할 때의 오류입니다.
따라서create 방법에 보충해 주십시오.
example.controller.rb

  def create
    @example = Example.create(example_params)
    redirect_to action: 'new'
    logger.debug @example.errors.inspect 
  end
railsc 컨트롤러에 걸지 않도록 주의하세요...
나는 여러 번 욕을 먹었다...
위의 줄을 추가한 다음create 방법을 다시 시작합니다.조작 서비스를 통해create를 적절하게 진행한다는 것이다.
#ターミナルのサーバ内
Parameters: {"utf8"=>"✓", "authenticity_token"=>"ZK5jDe6KPpFbwSR+wyg4PlO2+L5272x2BDmWdiKMccBnDI76BRMIbHmyM4o9lwFXIER6zDWfPszkUzWCa75w7g==", "example"=>{"name"=>"example", "place"=>"アキバ", "introduction"=>"面白い", "movie"=>""}, "commit"=>"Create Example"}
   (0.1ms)  begin transaction
   (0.1ms)  rollback transaction
Redirected to http://localhost:5000/climbing_movies/new
#<ActiveModel::Errors:0x007fc1a24214c0 @base=#<Example id: nil, created_at: nil, updated_at: nil, name: "example", place: "東京", introduction: "面白い", movie: "", user_id: nil>, @messages={:user=>["must exist"]}, @details={:user=>[{:error=>:blank}]}>
이렇게 되면 Active Model에 이은 글이 아래에 나옵니다.
간단하게 말하면 메시지는'이렇게 해야 돼!'details는 "이런 이유로 오류가 발생했다"는 뜻이다.
번역해 봤는데 @message=>User는 반드시 존재해야 한다.@details=>원래 이렇게 해야 하는데 공백이기 때문에 나에게 잘못된 것이라고 알려주었다.
user로 생각한 건 모델밖에 없어요... user_id나 참조 키가 없지만 관계가 설정되었습니다...
관계를 끊고 순조롭게 시작했어요!
실수 자체는 매우 초보적인 것이지만, 나는 실수를 없애는 것을 배웠다.
무슨 의견이 있으면 말씀하세요!

개인 개발 중인 여러분께.


Mover라는 제품을 개발 중입니다.등록 후 개발된 제품에 테스트 이용을 의뢰하고 피드백을 받을 수 있다.자신의 제품을 공개하고 개인 개발을 가속화하자!!현재 제 계정도 이미 등록되어 있습니다. 사용해 보실 수 있다면 실제로 사용한 소감을 보내드리겠습니다.(건의가 아니라 사용자로서의 소감이다.)공짜죠.
https://mover-web.herokuapp.com/

좋은 웹페이지 즐겨찾기