El plugin de post-votación entra en conflicto con el plugin anterior de preguntas y respuestas

¡Hola!

¡Hay un gran conflicto en mi Discourse desde el cambio…

  1. Antes tenía:
- git clone https://github.com/discourse/discourse-question-answer
  1. Hoy quise agregar:
- git clone https://github.com/discourse/discourse-question-answer
- git clone https://github.com/discourse/discourse-post-voting

Obtuve un conflicto entre ambos:

Resumen
I, [2022-12-09T10:13:26.139287 #1]  INFO -- : > cd /var/www/discourse && su discourse -c 'bundle exec rake db:migrate'
/var/www/discourse/plugins/discourse-question-answer/lib/question_answer/engine.rb:4: warning: already initialized constant QuestionAnswer::CREATE_AS_QA_DEFAULT
/var/www/discourse/plugins/discourse-post-voting/lib/question_answer/engine.rb:4: warning: previous definition of CREATE_AS_QA_DEFAULT was here
/var/www/discourse/plugins/discourse-question-answer/app/controllers/question_answer/votes_controller.rb:75: warning: already initialized constant QuestionAnswer::VotesController::VOTERS_LIMIT
/var/www/discourse/plugins/discourse-post-voting/app/controllers/question_answer/votes_controller.rb:75: warning: previous definition of VOTERS_LIMIT was here
/var/www/discourse/plugins/discourse-question-answer/app/models/question_answer_vote.rb:7: warning: already initialized constant QuestionAnswerVote::VOTABLE_TYPES
/var/www/discourse/plugins/discourse-post-voting/app/models/question_answer_vote.rb:7: warning: previous definition of VOTABLE_TYPES was here
/var/www/discourse/plugins/discourse-question-answer/app/models/question_answer_comment.rb:7: warning: already initialized constant QuestionAnswerComment::COOKED_VERSION
/var/www/discourse/plugins/discourse-post-voting/app/models/question_answer_comment.rb:7: warning: previous definition of COOKED_VERSION was here
/var/www/discourse/plugins/discourse-question-answer/app/models/question_answer_comment.rb:26: warning: already initialized constant QuestionAnswerComment::MARKDOWN_FEATURES
/var/www/discourse/plugins/discourse-post-voting/app/models/question_answer_comment.rb:26: warning: previous definition of MARKDOWN_FEATURES was here
/var/www/discourse/plugins/discourse-question-answer/app/models/question_answer_comment.rb:31: warning: already initialized constant QuestionAnswerComment::MARKDOWN_IT_RULES
/var/www/discourse/plugins/discourse-post-voting/app/models/question_answer_comment.rb:31: warning: previous definition of MARKDOWN_IT_RULES was here
/var/www/discourse/plugins/discourse-question-answer/extensions/topic_extension.rb:9: warning: already initialized constant Topic::QA_SUBTYPE
/var/www/discourse/plugins/discourse-post-voting/extensions/topic_extension.rb:9: warning: previous definition of QA_SUBTYPE was here
rake aborted!
ArgumentError: Invalid route name, already in use: 'question_answer' 
You may have defined two routes with the same name using the `:as` option, or you may be overriding a route already defined by a resource with the same naming. For the latter, you can restrict the routes created with `resources` as explained here: 
https://guides.rubyonrails.org/routing.html#restricting-the-routes-created
/var/www/discourse/vendor/bundle/ruby/2.7.0/gems/actionpack-6.1.6.1/lib/action_dispatch/routing/route_set.rb:587:in `add_route'
/var/www/discourse/vendor/bundle/ruby/2.7.0/gems/actionpack-6.1.6.1/lib/action_dispatch/routing/mapper.rb:1986:in `add_route'
/var/www/discourse/vendor/bundle/ruby/2.7.0/gems/actionpack-6.1.6.1/lib/action_dispatch/routing/mapper.rb:1957:in `decomposed_match'
/var/www/discourse/vendor/bundle/ruby/2.7.0/gems/actionpack-6.1.6.1/lib/action_dispatch/routing/mapper.rb:1921:in `block in map_match'
/var/www/discourse/vendor/bundle/ruby/2.7.0/gems/actionpack-6.1.6.1/lib/action_dispatch/routing/mapper.rb:1915:in `each'
/var/www/discourse/vendor/bundle/ruby/2.7.0/gems/actionpack-6.1.6.1/lib/action_dispatch/routing/mapper.rb:1915:in `map_match'
/var/www/discourse/vendor/bundle/ruby/2.7.0/gems/actionpack-6.1.6.1/lib/action_dispatch/routing/mapper.rb:1663:in `match'
/var/www/discourse/vendor/bundle/ruby/2.7.0/gems/actionpack-6.1.6.1/lib/action_dispatch/routing/mapper.rb:642:in `mount'
/var/www/discourse/plugins/discourse-question-answer/config/routes.rb:16:in `block in <main>'
/var/www/discourse/vendor/bundle/ruby/2.7.0/gems/actionpack-6.1.6.1/lib/action_dispatch/routing/route_set.rb:427:in `instance_exec'
/var/www/discourse/vendor/bundle/ruby/2.7.0/gems/actionpack-6.1.6.1/lib/action_dispatch/routing/route_set.rb:427:in `eval_block'
/var/www/discourse/vendor/bundle/ruby/2.7.0/gems/actionpack-6.1.6.1/lib/action_dispatch/routing/route_set.rb:434:in `block in finalize!'
/var/www/discourse/vendor/bundle/ruby/2.7.0/gems/actionpack-6.1.6.1/lib/action_dispatch/routing/route_set.rb:434:in `each'
/var/www/discourse/vendor/bundle/ruby/2.7.0/gems/actionpack-6.1.6.1/lib/action_dispatch/routing/route_set.rb:434:in `finalize!'
/var/www/discourse/vendor/bundle/ruby/2.7.0/gems/railties-6.1.6.1/lib/rails/application/routes_reloader.rb:51:in `each'
/var/www/discourse/vendor/bundle/ruby/2.7.0/gems/railties-6.1.6.1/lib/rails/application/routes_reloader.rb:51:in `finalize!'
/var/www/discourse/vendor/bundle/ruby/2.7.0/gems/railties-6.1.6.1/lib/rails/application/routes_reloader.rb:22:in `reload!'
/var/www/discourse/vendor/bundle/ruby/2.7.0/gems/railties-6.1.6.1/lib/rails/application/routes_reloader.rb:35:in `block in updater'
/var/www/discourse/vendor/bundle/ruby/2.7.0/gems/activesupport-6.1.6.1/lib/active_support/file_update_checker.rb:83:in `execute'
/var/www/discourse/vendor/bundle/ruby/2.7.0/gems/railties-6.1.6.1/lib/rails/application/routes_reloader.rb:10:in `execute'
/var/www/discourse/vendor/bundle/ruby/2.7.0/gems/railties-6.1.6.1/lib/rails/application/finisher.rb:195:in `block in <module:Finisher>'
/var/www/discourse/vendor/bundle/ruby/2.7.0/gems/railties-6.1.6.1/lib/rails/initializable.rb:32:in `instance_exec'
/var/www/discourse/vendor/bundle/ruby/2.7.0/gems/railties-6.1.6.1/lib/rails/initializable.rb:32:in `run'
/var/www/discourse/vendor/bundle/ruby/2.7.0/gems/railties-6.1.6.1/lib/rails/initializable.rb:61:in `block in run_initializers'
/var/www/discourse/vendor/bundle/ruby/2.7.0/gems/railties-6.1.6.1/lib/rails/initializable.rb:60:in `run_initializers'
/var/www/discourse/vendor/bundle/ruby/2.7.0/gems/railties-6.1.6.1/lib/rails/application.rb:391:in `initialize!'
/var/www/discourse/vendor/bundle/ruby/2.7.0/gems/railties-6.1.6.1/lib/rails/railtie.rb:207:in `public_send'
/var/www/discourse/vendor/bundle/ruby/2.7.0/gems/railties-6.1.6.1/lib/rails/railtie.rb:207:in `method_missing'
/var/www/discourse/config/environment.rb:7:in `<main>'
/var/www/discourse/vendor/bundle/ruby/2.7.0/gems/bootsnap-1.9.4/lib/bootsnap/load_path_cache/core_ext/kernel_require.rb:23:in `require'
/var/www/discourse/vendor/bundle/ruby/2.7.0/gems/bootsnap-1.9.4/lib/bootsnap/load_path_cache/core_ext/kernel_require.rb:23:in `block in require_with_bootsnap_lfi'
/var/www/discourse/vendor/bundle/ruby/2.7.0/gems/bootsnap-1.9.4/lib/bootsnap/load_path_cache/loaded_features_index.rb:88:in `register'
/var/www/discourse/vendor/bundle/ruby/2.7.0/gems/bootsnap-1.9.4/lib/bootsnap/load_path_cache/core_ext/kernel_require.rb:22:in `require_with_bootsnap_lfi'
/var/www/discourse/vendor/bundle/ruby/2.7.0/gems/bootsnap-1.9.4/lib/bootsnap/load_path_cache/core_ext/kernel_require.rb:31:in `require'
/var/www/discourse/vendor/bundle/ruby/2.7.0/gems/zeitwerk-2.6.0/lib/zeitwerk/kernel.rb:35:in `require'
/var/www/discourse/vendor/bundle/ruby/2.7.0/gems/activesupport-6.1.6.1/lib/active_support/dependencies.rb:332:in `block in require'
/var/www/discourse/vendor/bundle/ruby/2.7.0/gems/activesupport-6.1.6.1/lib/active_support/dependencies.rb:299:in `load_dependency'
/var/www/discourse/vendor/bundle/ruby/2.7.0/gems/activesupport-6.1.6.1/lib/active_support/dependencies.rb:332:in `require'
/var/www/discourse/vendor/bundle/ruby/2.7.0/gems/railties-6.1.6.1/lib/rails/application.rb:367:in `require_environment!'
/var/www/discourse/vendor/bundle/ruby/2.7.0/gems/railties-6.1.6.1/lib/rails/application.rb:533:in `block in run_tasks_blocks'
/var/www/discourse/vendor/bundle/ruby/2.7.0/gems/rake-13.0.6/exe/rake:27:in `<top (required)>'
/usr/local/bin/bundle:25:in `load'
/usr/local/bin/bundle:25:in `<main>'
Tasks: TOP => db:migrate => db:load_config => environment
(See full trace by running task with --trace)
I, [2022-12-09T10:13:36.170591 #1]  INFO -- : gem install rrule -v 0.4.4 -i /var/www/discourse/plugins/discourse-calendar/gems/2.7.6 --no-document --ignore-dependencies --no-user-install
Successfully installed rrule-0.4.4
1 gem installed



FAILED
--------------------
  1. Luego eliminé el primero. La compilación está bien, pero la aplicación ya no se ejecuta:
    • Obtengo un HTTP 500
    • Los registros de errores de nginx me muestran algo así:
    root@slazvmeutp01:/opt/discourse# cat /var/opt/discourse/var-log/nginx/error.log
    2022/12/09 10:47:34 [notice] 537#537: signal process started
    2022/12/09 10:47:37 [error] 554#554: *2 connect() failed (111: Connection refused) while connecting to upstream, client: 18.156.156.214, server: _, request: "POST /message-bus/76e1bd78eedf43a5a337b6f44a8b88d0/poll?dlp=t HTTP/2.0", upstream: "http://127.0.0.1:3000/message-bus/76e1bd78eedf43a5a337b6f44a8b88d0/poll?dlp=t", host: "mydiscourse.domain.com", referrer: "https://mydiscourse.domain.com/admin/plugins"
    2022/12/09 10:59:08 [crit] 554#554: *398 SSL_do_handshake() failed (SSL: error:141CF06C:SSL routines:tls_parse_ctos_key_share:bad key share) while SSL handshaking, client: 212.102.40.218, server: 0.0.0.0:443
    2022/12/09 11:25:50 [notice] 530#530: signal process started
    

Noté que el repositorio de Git https://github.com/discourse/discourse-question-answer ahora redirige al segundo https://github.com/discourse/discourse-post-voting.
Esto explicaría el conflicto en la primera compilación de hoy.
Pero ¿qué pasa ahora? Menciona un error de TLS en lugar de un error del plugin…

¿Alguna idea?

Tener solo discourse-post-voting es la decisión correcta. :+1:

No estoy seguro de los registros de errores de nginx, pero tampoco supongo que tengas discourse-feature-voting en tus plugins, ¿verdad?

¡¡OMG tenías razón!!
Yo también lo tenía y puedo ver que el repositorio de Git también redirige a https://github.com/discourse/discourse-post-voting !! :scream_cat:

Pero espera… ¿topic-voting y q&a se fusionaron en post-voting? ¿Se acumulan las funciones?

Así que esta es mi última lista de plugins:

hooks:
  after_code:
    - exec:
        cd: $home/plugins
        cmd:
          - mkdir -p plugins
          - git clone https://github.com/discourse/docker_manager.git
          - git clone https://github.com/discourse/discourse-openid-connect
          - git clone https://github.com/discourse/discourse-solved
          - git clone https://github.com/discourse/discourse-yearly-review
          - git clone https://github.com/discourse/discourse-checklist
          - git clone https://github.com/discourse/discourse-docs
          - git clone https://github.com/discourse/discourse-reactions
            #- git clone https://github.com/discourse/discourse-feature-voting
          - git clone https://github.com/discourse/discourse-calendar
            #- git clone https://github.com/discourse/discourse-gamification
          - git clone https://github.com/discourse/discourse-gamification && cd discourse-gamification && git checkout 6a399b4c220f31de62049504d27ff6e50611fbef
          - git clone https://github.com/discourse/discourse-follow
          - git clone https://github.com/discourse/discourse-spoiler-alert
          - git clone https://github.com/paviliondev/discourse-news
          - git clone https://github.com/cfstras/discourse-konami.git
            #- git clone https://github.com/discourse/discourse-question-answer
          - git clone https://github.com/discourse/discourse-post-voting

Discourse finalmente responde.
Pero ahora otros problemas:

  1. El administrador de plugins muestra “question & answer”…
    image
  2. Cuando creo un tema, el menú de elementos no es bueno:
  3. La configuración en la configuración de la categoría siempre muestra q&a
    image

Así que parece que q&a siempre está ahí…

¡No, me equivoqué!
Son proyectos separados, lo siento.

discourse-feature-voting era el nombre anterior de Discourse Topic Voting, y tener el nombre antiguo allí causa algunos conflictos de carga cuando también tienes post-voting. Si agregas el nuevo discourse-topic-voting, deberías poder tener ambos de nuevo. :+1:

No estoy seguro de por qué todavía tienes el formato antiguo de Q&A. Noto que estás revisando una versión específica de Gamification, ¿es porque estás limitado a una cierta compatibilidad?

¡Sí!
Soy yo quien rastrea la versión “estable” de Discourse :sweat_smile:
Esta es una solución que mencioné aquí: Database migrate fails in "stable" version - #2 by gmoirod

Ok, voy a probar ahora mismo.

Yo tampoco :sob:

El plugin oficial post-voting se renombró a ‘post-voting’ hace relativamente poco, y fue de preguntas y respuestas en la interfaz de usuario, etc. durante un tiempo. Es posible que tu instalación no esté captando esos cambios, ya que estás siguiendo la versión Estable (Stable)?

¿Hay alguna forma de "desinstalar" correctamente un plugin?
Podría usar eso para desinstalar q&a y post-voting, luego reinstalar post-voting…

Cuando revisas tu página /admin/upgrade, ¿qué número de versión ves junto a post-voting?

El mío, que pasó las pruebas y está actualizado, es: 5ea4dccf

Editar: Corregí la dirección de la página :slight_smile:

Seems ok to have topic-voting now.

I do not have a /plugins page :thinking:
But on the /admin/upgrade page I got :

  1. Do not have post-voting
  2. q&a shows without green check

Parece que estás bloqueado en este commit de septiembre, cuando todavía era pregunta-respuesta:

¿Estás actualizado con la versión Estable? ¿En qué versión te encuentras actualmente?


Parece bien.



Nuevo problema…

  1. Eliminé la votación de publicaciones y de temas y reconstruí la aplicación para intentar empezar desde algo limpio (q&a tampoco aparece después de muchos intentos): ok, ya no hay plugins
  2. Volví a habilitar la votación de publicaciones y de temas y ahora la reconstrucción falla…
Resumen
I, [2022-12-09T14:27:32.724323 #1]  INFO -- : cd /var/www/discourse && su discourse -c 'bundle exec rake themes:update assets:precompile'
Failed to update 'Discourse Loading Slider': Timeout::Error
rake aborted!
Timeout::Error: Timeout::Error
/var/www/discourse/lib/final_destination/resolver.rb:28:in `block in lookup'
/var/www/discourse/lib/final_destination/resolver.rb:7:in `synchronize'
/var/www/discourse/lib/final_destination/resolver.rb:7:in `lookup'
/var/www/discourse/lib/final_destination/ssrf_detector.rb:84:in `lookup_ips'
/var/www/discourse/lib/final_destination/ssrf_detector.rb:64:in `lookup_and_filter_ips'
/var/www/discourse/lib/theme_store/git_importer.rb:139:in `block in clone_http!'
/var/www/discourse/lib/theme_store/git_importer.rb:131:in `each'
/var/www/discourse/lib/theme_store/git_importer.rb:131:in `clone_http!'
/var/www/discourse/lib/theme_store/git_importer.rb:93:in `clone!'
/var/www/discourse/lib/theme_store/git_importer.rb:18:in `import!'
/var/www/discourse/app/models/remote_theme.rb:126:in `update_remote_version'
/var/www/discourse/lib/tasks/themes.rake:62:in `block in update_themes'
/var/www/discourse/vendor/bundle/ruby/2.7.0/gems/activerecord-6.1.6.1/lib/active_record/relation/batches.rb:71:in `block (2 levels) in find_each'
/var/www/discourse/vendor/bundle/ruby/2.7.0/gems/activerecord-6.1.6.1/lib/active_record/relation/batches.rb:71:in `each'
/var/www/discourse/vendor/bundle/ruby/2.7.0/gems/activerecord-6.1.6.1/lib/active_record/relation/batches.rb:71:in `block in find_each'
/var/www/discourse/vendor/bundle/ruby/2.7.0/gems/activerecord-6.1.6.1/lib/active_record/relation/batches.rb:138:in `block in find_in_batches'
/var/www/discourse/vendor/bundle/ruby/2.7.0/gems/activerecord-6.1.6.1/lib/active_record/relation/batches.rb:245:in `block in in_batches'
/var/www/discourse/vendor/bundle/ruby/2.7.0/gems/activerecord-6.1.6.1/lib/active_record/relation/batches.rb:229:in `loop'
/var/www/discourse/vendor/bundle/ruby/2.7.0/gems/activerecord-6.1.6.1/lib/active_record/relation/batches.rb:229:in `in_batches'
/var/www/discourse/vendor/bundle/ruby/2.7.0/gems/activerecord-6.1.6.1/lib/active_record/relation/batches.rb:137:in `find_in_batches'
/var/www/discourse/vendor/bundle/ruby/2.7.0/gems/activerecord-6.1.6.1/lib/active_record/relation/batches.rb:70:in `find_each'
/var/www/discourse/lib/tasks/themes.rake:56:in `update_themes'
/var/www/discourse/lib/tasks/themes.rake:87:in `block (2 levels) in <main>'
/var/www/discourse/vendor/bundle/ruby/2.7.0/gems/rails_multisite-4.0.0/lib/rails_multisite/connection_management.rb:80:in `with_connection'
/var/www/discourse/vendor/bundle/ruby/2.7.0/gems/rails_multisite-4.0.0/lib/rails_multisite/connection_management.rb:90:in `each_connection'
/var/www/discourse/lib/tasks/themes.rake:86:in `block in <main>'
/var/www/discourse/vendor/bundle/ruby/2.7.0/gems/rake-13.0.6/exe/rake:27:in `<top (required)>'
/usr/local/bin/bundle:25:in `load'
/usr/local/bin/bundle:25:in `<main>'
Tasks: TOP => themes:update
(See full trace by running task with --trace)
I, [2022-12-09T14:27:49.987988 #1]  INFO -- : Checking 'Modern Category + Group Boxes' for 'default'... up to date
Checking 'Dark-Light Toggle' for 'default'... updating from cd221006 to 3f72c88f
Checking 'Discourse Loading Slider' for 'default'... 

FAILED
--------------------

Reconstruye de nuevo y pasó.
Así que el último problema con 'Discourse Loading Slider' fue solo un error.
Olvídalo.

Mi problema principal es que las preguntas y respuestas permanecen en lugar de la votación de publicaciones…

Creo que esto puede ser una consecuencia de la compilación que estás utilizando y de la compatibilidad. Si observas lo que debería ser discourse-topic-voting, en tu página todavía aparece como discourse-voting.

¿Entonces quieres decir que debería usar la versión ‘tests-passed’ de discourse?

Si quieres las últimas versiones de las cosas. :slightly_smiling_face:

Preferiría versiones ‘funcionales’ de las cosas en realidad :sweat_smile:
Sé que hay un tema sobre la versión a usar pretendiendo que ‘tests-passed’ está lista para usar.
Pero soy una especie de ‘tipo debian’, ¿sabes… Estabilidad para producción!

También creo que es una buena opción. :+1: :slightly_smiling_face: La contrapartida es que tendrás que esperar al lanzamiento de la versión 3.0 el año que viene antes de que puedas tener estas últimas actualizaciones funcionando con Stable.

Okay…

Esto es un poco decepcionante que la gestión de plugins no ofrezca una forma de seguir una referencia git dada.
Y que los plugins sigan el ciclo de vida de Discourse.
Para que puedas seguir globalmente la ‘versión estable’ de Discourse Y de los plugins.

En realidad, cada reconstrucción o adopción de un plugin se siente como una rueda de la fortuna.

Me temo que mi conocimiento sobre la rama Estable es bastante limitado, pero creo que está más orientada a no cambiar las cosas muy a menudo. ¿Así que añadir nuevos plugins y extras fuera de una ventana de lanzamiento Estable sería contraproducente para eso?

También vale la pena decir que la mayoría de los sitios de Discourse utilizan tests-passed y, en general, no tienen problemas notables. Incluso seguir tests-passed no significa que necesites actualizar todos los días y estar en la versión más reciente, así que no es tan cambiante como podrías pensar. Tendrías que pulsar manualmente el botón de actualización desde tu página /upgrade, o realizar una reconstrucción, para incorporar esos cambios a tu sitio.

El alojamiento gestionado también facilita este proceso como alternativa, ya que se encargarán de todas las cosas técnicas y te permitirán concentrarte en tu comunidad. :+1: