Wenn das Ruby on Rails-Terminal zurückrollt

Dieses Mal habe ich die Lösungen für das Phänomen des Zurückrollens beim Ausführen auf der Konsole zusammengefasst. Dieses Mal werde ich das Scraping als Beispiel erläutern. Es gibt einen Kommentar in der zweiten Hälfte.

scraping.rb


class Scraping < ApplicationRecord
    def self.get_infomation
        require 'mechanize'
        agent = Mechanize.new
        links = []
        current_page = agent.get("https://talent-dictionary.com/s/jobs/3/20")
        elements = current_page.at('.home_talent_list_wrapper')
        boxs = elements.search('.item')
        roks = boxs.search('.right')
        qqqs = roks.search('a')
        eees = qqqs.search('.title')
        eees.each do |eee|
            links <<  eee.inner_text
        end
        links.each do |link|
            get_personal_infomation('https://talent-dictionary.com/' + link)
        end
    end
    def self.get_personal_infomation(link)
        agent = Mechanize.new
        personal_page = agent.get(link)
        aaas = personal_page.at('.talent_name_wrapper')
        ages = aaas.at('.age').inner_text.delete('Alter').to_i if aaas.at('.age')
        names = aaas.at('h1').inner_text  if aaas.at('h1')
        image_urls = personal_page.at('.main_image img').get_attribute('src') if personal_page.at('.main_image img')
        infomation = Infomation.where(name: names).first_or_initialize
        infomation.age = ages
        infomation.image_url = image_urls
        infomation.save
        byebug
    end
end

Führen Sie get_infomation in der Konsole aus.

[1] pry(main)> Scraping.get_infomation
   (0.3ms)  SET NAMES utf8,  @@SESSION.sql_mode = CONCAT(CONCAT(@@sql_mode, ',STRICT_ALL_TABLES'), ',NO_AUTO_VALUE_ON_ZERO'),  @@SESSION.sql_auto_is_null = 0, @@SESSION.wait_timeout = 2147483
  Infomation Load (0.2ms)  SELECT  `infomations`.* FROM `infomations` WHERE `infomations`.`name` = 'Hirose Dose' ORDER BY `infomations`.`id` ASC LIMIT 1
   (0.1ms)  BEGIN
   (0.1ms)  ROLLBACK
Return value is: nil

[23, 32] in /home/ec2-user/environment/filebook/app/models/scraping.rb
   23:         ages = aaas.at('.age').inner_text.delete('Alter').to_i if aaas.at('.age')
   24:         names = aaas.at('h1').inner_text  if aaas.at('h1')
   25:         image_urls = personal_page.at('.main_image img').get_attribute('src') if personal_page.at('.main_image img')
   26:         infomation = Infomation.where(name: names).first_or_initialize
   27:         infomation.age = ages
   28:         infomation.image_url = image_urls
   29:         infomation.save
   30:         byebug
=> 31:     end
   32: end
(byebug) 

Wenn ich mir dieses Ergebnis anschaue, verstehe ich nicht, warum ein Rollback durchgeführt wird. Es gibt einen Befehl, der den Grund für diesen Rollback ausspuckt! !! !!

Es gibt zwei Stufen. Die erste Straße ist

aplication.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 Filebook
  class Application < Rails::Application
    # Initialize configuration defaults for originally generated Rails version.
    config.load_defaults 5.2
    config.logger = Logger.new(STDOUT)← Beschreibung dieser Spalte
    # Settings in config/environments/* take precedence over those specified here.
    # Application configuration can go into files in config/initializers
    # -- all .rb files in that directory are automatically loaded after loading
    # the framework and any gems in your application.
  end
end
  1. Stufe

scraping.rb


class Scraping < ApplicationRecord
    def self.get_infomation
        require 'mechanize'
        agent = Mechanize.new
        links = []
        current_page = agent.get("https://talent-dictionary.com/s/jobs/3/20")
        elements = current_page.at('.home_talent_list_wrapper')
        boxs = elements.search('.item')
        roks = boxs.search('.right')
        qqqs = roks.search('a')
        eees = qqqs.search('.title')
        eees.each do |eee|
            links <<  eee.inner_text
        end
        links.each do |link|
            get_personal_infomation('https://talent-dictionary.com/' + link)
        end
    end
    def self.get_personal_infomation(link)
        agent = Mechanize.new
        personal_page = agent.get(link)
        aaas = personal_page.at('.talent_name_wrapper')
        ages = aaas.at('.age').inner_text.delete('Alter').to_i if aaas.at('.age')
        names = aaas.at('h1').inner_text  if aaas.at('h1')
        image_urls = personal_page.at('.main_image img').get_attribute('src') if personal_page.at('.main_image img')
        infomation = Infomation.where(name: names).first_or_initialize
        infomation.age = ages
        infomation.image_url = image_urls
        infomation.save
        logger.debug infomation.errors.inspizieren ← Diese Beschreibung
        byebug
    end
end

Wenn Sie diese beiden Schritte dazwischen legen

[1] pry(main)> Scraping.get_infomation
D, [2020-11-02T13:39:29.459445 #5812] DEBUG -- :    (0.3ms)  SET NAMES utf8,  @@SESSION.sql_mode = CONCAT(CONCAT(@@sql_mode, ',STRICT_ALL_TABLES'), ',NO_AUTO_VALUE_ON_ZERO'),  @@SESSION.sql_auto_is_null = 0, @@SESSION.wait_timeout = 2147483
D, [2020-11-02T13:39:29.464122 #5812] DEBUG -- :   Infomation Load (0.2ms)  SELECT  `infomations`.* FROM `infomations` WHERE `infomations`.`name` = 'Hirose Dose' ORDER BY `infomations`.`id` ASC LIMIT 1
D, [2020-11-02T13:39:29.470351 #5812] DEBUG -- :    (0.1ms)  BEGIN
D, [2020-11-02T13:39:29.476168 #5812] DEBUG -- :    (0.1ms)  ROLLBACK
D, [2020-11-02T13:39:29.476801 #5812] DEBUG -- : #<ActiveModel::Errors:0x0000000004383ef8 @base=#<Infomation id: 14, age: 22, name: "Hirose Dose", image_url: "https://images.talent-dictionary.com/uploads/image...", created_at: "2020-11-01 07:14:44", updated_at: "2020-11-01 07:14:44">, @messages={:user=>["must exist"]}, @details={:user=>[{:error=>:blank}]}>
Return value is:nil ↑ Beschreibung oben

[24, 33] in /home/ec2-user/environment/filebook/app/models/scraping.rb
   24:         names = aaas.at('h1').inner_text  if aaas.at('h1')
   25:         image_urls = personal_page.at('.main_image img').get_attribute('src') if personal_page.at('.main_image img')
   26:         infomation = Infomation.where(name: names).first_or_initialize
   27:         infomation.age = ages
   28:         infomation.image_url = image_urls
   29:         infomation.save
   30:         logger.debug infomation.errors.inspect
   31:         byebug
=> 32:     end
   33: end
(byebug) 
<ActiveModel::Errors:0x0000000004383ef8 @base=#<Infomation id: 14, age: 22, name: "Hirose Dose", image_url: "https://images.talent-dictionary.com/uploads/image...", created_at: "2020-11-01 07:14:44", updated_at: "2020-11-01 07:14:44">, @messages={:user=>["must exist"]}, @details={:user=>[{:error=>:blank}]}>

Ich habe einen solchen Fehler ausgespuckt.

Dieser Fehler führt dazu, dass {: user => ["muss vorhanden sein"] Benutzer erforderlich ist, aber {: user => [{: error =>: blank}] Es kann jedoch übersetzt werden, dass die Benutzerspalte leer ist.

Scheint ein Assoziationsfehler zu sein.

Letzte Hälfte

Ein Logger spuckt Protokolle (die angeben, was getan wurde) von Controllern, Modellen, Ansichten usw. aus. Die Funktionalität von logger besteht aus der Logger-Klasse, die von der ActiveSupport-Klasse erbt.

・ Config / application.rb ・ Config / evironments / xxxxxxx.rb -In einer Datei mit einer Klasse, die ActiveSupport erbt Du kannst es benutzen.

Sie können die Datei zum Speichern des Protokolls angeben, indem Sie Logger.new ('Dateiname') schreiben. (STDOUT) wird standardmäßig in der Datei 'log / development.log' gespeichert

Dies ist ein Schritt. In der zweiten Phase schreiben wir den Code in die zu verarbeitende Datei. logger.debug xxxxx.errors.inspect Wenn Sie error.inspect schreiben, werden die Fehler überprüft.

Bitte probieren Sie es aus.

Recommended Posts

Wenn das Ruby on Rails-Terminal zurückrollt
Progate Ruby on Rails5 Rückblick
Wenn das Ruby on Rails-Terminal zurückrollt
Progate Ruby on Rails5 Rückblick
Modell [Ruby on Rails], Befehl für Controller-Terminal
[Ruby on Rails] Bis zur Einführung von RSpec
Veröffentlichen Sie die mit Ruby on Rails erstellte App
Ruby on Rails Elementary
Ruby on Rails Grundlagen
Ruby On Rails Association
Bestimmen Sie die aktuelle Seite mit Ruby on Rails
Ruby on Rails Wenn Sie die Ursache für das Zurücksetzen beim Speichern nicht kennen.
[Ruby on Rails] So ändern Sie den Spaltennamen
Ruby on Rails-Lernprogramm Problematische Hinweise unter Windows
(Ruby on Rails6) Reflektiert den veröffentlichten Inhalt aus dem Formular
Versuchen Sie es mit dem Ruby on Rails-Abfrageattribut
Ruby on Rails Lernrekord -2020.10.03
Portfolioerstellung Ruby on Rails
Ruby on Rails Lernrekord -2020.10.04
[Ruby on Rails] Debuck (bindend.pry)
Ruby on Rails Lernrekord -2020.10.05
Ruby on Rails Lernrekord -2020.10.09
Ruby on Rails lernen Rekord-2020.10.07 ②
Ruby on Rails lernen Rekord-2020.10.07 ①
Brechen Sie die Ruby on Rails-Migration ab
Ruby on Rails Lernrekord -2020.10.06
Zusammenfassung der Ruby on Rails-Validierung
Ruby on Rails Grundlegendes Memorandum
[Ruby on Rails] Implementierung einer Validierung, die nur funktioniert, wenn die Bedingungen erfüllt sind
[Ruby on Rails] Wenn der Befehl heroku ausgeführt wird, wird der Befehl bash: heroku: nicht gefunden angezeigt. [Rails Tutorial]
[Ruby on Rails] Nur den Benutzer, der Beiträge verfasst hat, dürfen bearbeiten
[Ruby on Rails] Wenn die ID-Erfassung des Parameters nicht gut lief
[Ruby on Rails] Zeigt den Seitentitel schnell im Browser an
(Ruby on Rails6) Anzeige der Datenbank, die die ID der Datenbank erhalten hat
Alle Inhalte der Listenseite löschen [Ruby on Rails]
Ein Hinweis zum Seed-Feature von Ruby on Rails
[Ruby on Rails] Geben Sie automatisch eine Adresse aus einer Postleitzahl ein
[Hinweis] Über das Fizz_Buzz-Problem (Funktionsweise von Ruby on Rails)
[Ruby on Rails] Spaltenbeschränkungen beim Speichern in der Datenbank (4 Vertreter)
[Ruby on Rails] Leseversuch (: [],: Schlüssel)
Ruby on Rails-Variablen, konstante Zusammenfassung
Installation von Ruby + Rails unter Ubuntu 18.04 (rbenv)
Grundkenntnisse in Ruby on Rails
Verwendung von Ruby on Rails
Programmieren mit Ruby (unterwegs)
Ruby on Rails Japanisch-Englisch kompatibler i18n
(Ruby on Rails6) Gepostete Inhalte "löschen"
[Ruby on Rails] CSV-Ausgabefunktion
Ruby on Rails 6.0-Umgebungskonstruktionsnotiz
[Ruby on Rails] Erstellung der Bestätigungsseite