¿Cómo evito el límite de tasa al importar un montón de datos?

Estoy intentando crear un montón de temas + publicaciones automáticamente. Sin embargo, sigo recibiendo límites de velocidad.

Primero intenté esto usando la API. Mi script rápidamente encontró errores 429. Intenté ajustar los límites de velocidad como administrador (ver captura de pantalla), pero no tengo claro cuál es el enfoque correcto aquí, o si esto es una misión imposible.

Luego, intenté usar un script de Ruby con rails r <script> desde dentro del contenedor. Sin embargo, aquí de nuevo, estoy viendo An error occurred RateLimiter::LimitExceeded. Me sorprendió esto, ¿por qué el método de Ruby está sujeto a límites de velocidad?

En cualquier caso, ¿hay alguna manera de evitar esto? ¿Cuál es la forma correcta de importar datos en bloque? Pensé en usar SQL directamente, pero preferiría una API de nivel superior para no tener que preocuparme por los campos faltantes en la base de datos cuando creo un elemento.

Gracias de antemano.

¿Cómo se ve?

Deberías usar rails para importar los datos, no la API.

Podrías echar un vistazo a los scripts de importación, pero podrías necesitar algo más simple.

def add_all()
  limit = 2000
  translations = Dir["/shared/translations/vagrant-data/translations/*.txt"]
  ps = Dir["/shared/translations/vagrant-data/paragraphs/*.txt"]

  # RateLimiter.new.disable_rate_limits!

  translations.each_with_index do |t,i|
    p = ps[i]

    tr_text = File.read(t)
    p_text = File.read(p)
   

    description = "#{p_text}\n\nTranslated as:\n\n#{tr_text}"
    title = " el libro (párrafo ##{i+1})"
    if (i < limit)
      begin
        puts "Añadiendo tema #{tr_text}"
        topic = Topic.create!( title: title, category_id: 5, user_id: 3 )
        Post.create!( topic_id: topic.id, raw: description, user_id: 3, skip_validation: true )
      rescue Exception => e
        puts "Ocurrió un error #{e}"
      end
    end
  end
end

add_all()

¿Y eso genera un error de límite de tasa? Pensaría que eso funcionaría bien.

Sí, mira mi publicación anterior. Entra en el bloque rescue con ese error.

1 me gusta

Me pregunto si mi servidor está en un estado extraño. Jugué con los límites de velocidad en la captura de pantalla, poniéndolos a cero y tal vez a -1. Ahora estoy recibiendo estos errores de límite de velocidad en todas partes. Es extraño, sin embargo, algunas de las solicitudes pasan, así que de 1500 registros que quiero crear, tres o cuatro llegan a la base de datos. Tal vez elimine la base de datos y la actualice y vea si eso lo soluciona. No estoy seguro de cómo verificar el estado de la base de datos y capturar el error si lo hay.

1 me gusta

¿Cómo se creó esta instancia? ¿Qué versión está ejecutando?

1 me gusta
#### Instalado

### 3.1.0.beta5

( [ 5584fb1e3b ](https://github.com/discourse/discourse/commits/5584fb1e3b7a29d7ee5d7e43520191081dd10a16) )

Acabo de hacer la instalación normal con Docker. Nada especial.

¿Es posible deshabilitar temporalmente los límites de frecuencia mientras importo y luego restaurarlos más tarde? En este momento, soy el único que usará la API (no preveo permitir que mis usuarios usen la API). Por lo tanto, incluso podría deshabilitar permanentemente los límites de frecuencia si eso es posible.

Nunca he visto límites de tasa funcionando en Rails. No tengo ni idea.

1 me gusta

@pfaffman Apuesto a que arruiné algo al cambiar los límites de velocidad y ahora el sistema está en un estado extraño y estos errores no son realmente el problema, es otra cosa. Voy a crear el servidor de nuevo y ver si mi script funciona esta vez y luego informaré.

2 Me gusta

Lamentablemente, recrear el servidor no solucionó las cosas. :frowning:

Eliminé el directorio postgres_data dentro de shared y luego ejecuté ./launcher rebuild app y obtuve una nueva instancia de la aplicación.

Mi script ahora crea el usuario y la categoría propiedad del usuario, y luego intenta crear temas dentro de esa categoría. Pero, inmediatamente se topa con el error de límite de velocidad: An error occurred RateLimiter::LimitExceeded

Estoy realmente perplejo, ya que parece que los scripts rails r no deberían estar sujetos a los problemas de límite de velocidad, ¿verdad? Veo código en los modelos que indica que se ejecuta código de limitación de velocidad, pero no sé cómo deshabilitarlo ni cómo verificar que esto solo deba ocurrir cuando una solicitud llega a través de la API.

¿Alguna otra sugerencia? Creo que ir directamente a través de psql es ahora mi mejor opción, lo cual es decepcionante porque el script rails r es mucho más limpio y fácil de usar.

¡Lo arreglé!

El poder de las pruebas se demuestra aquí mismo. Fui a este archivo:

Eso mostró este método RateLimiter.enable. Pensé, ¿por qué no probar RateLimiter.disable?

¡No más errores de límite de velocidad!

4 Me gusta

¡Buen trabajo! Nunca había visto esto antes.

This topic was automatically closed 30 days after the last reply. New replies are no longer allowed.