Come posso installare il mio plugin scritto in Ruby?

Ho un file CSV con le email dei miei utenti discourse. Ho bisogno di creare uno script che venga eseguito quotidianamente e invii un modello di email specifico a un insieme specifico di utenti. Quindi, ogni giorno devo eseguire questo script con il set successivo di utenti. Come posso farlo?

Secondo https://ask.discourse.com/ devo creare il mio codice per automatizzare questo e inserire il codice e i dati nella cartella plugins. Il suggerimento di codice è qui:

# frozen_string_literal: true
# name: auto-email
# about: Un plugin personalizzato per inviare email in massa utilizzando l'automazione e file CSV
# version: 0.3

require 'csv'

after_initialize do
  if defined?(DiscourseAutomation)
    # Definisci uno scriptable univoco per l'automazione
    DiscourseAutomation::Scriptable::AUTO_EMAIL_SCRIPT = "auto_email_script"

    add_automation_scriptable(DiscourseAutomation::Scriptable::AUTO_EMAIL_SCRIPT) do
      # Definisci i campi per l'interfaccia utente delle automazioni:
      field :email_template, component: :message # Corpo dell'email da inviare
      field :csv_file_name, component: :text # Nome del file CSV nella cartella "data"

      script do |context, fields, automation|
        # Definisci il percorso della cartella dei dati
        data_folder_path = Rails.root.join("plugins", "auto-email", "data")

        # Ottieni il nome del file CSV dal campo di automazione dell'amministratore
        csv_file_name = fields["csv_file_name"]["value"]
        csv_file_path = File.join(data_folder_path, csv_file_name)

        # Assicurati che il file esista
        unless File.exist?(csv_file_path)
          Rails.logger.warn("File CSV #{csv_file_path} non trovato!")
          next
        end

        # Analizza il file CSV
        begin
          users = CSV.read(csv_file_path, headers: true).map(&:to_hash)
        rescue StandardError => e
          Rails.logger.error("Errore durante la lettura del file CSV (#{csv_file_name}): #{e.message}")
          next
        end

        # Ottieni il contenuto del messaggio email dal campo di automazione
        email_body = fields["email_template"]["value"]

        # Itera sugli utenti dal CSV e invia le email
        users.each do |user_data|
          email = user_data["email"] || user_data["normalized_email"]
          user = User.find_by_email(email)

          if user
            begin
              # Invia un'email automatizzata utilizzando SystemMessage
              SystemMessage.new(user).send_email(
                "custom_email_template", # Assicurati che questo modello di email esista
                message_body: email_body
              )
              Rails.logger.info("Email inviata a: #{email}")
            rescue StandardError => e
              Rails.logger.error("Impossibile inviare email a #{email}: #{e.message}")
            end
          else
            Rails.logger.warn("Nessun utente trovato con email: #{email}")
          end
        end
      end
    end
  end
end

E la struttura del mio plugin è questa:
/var/discourse/plugins/auto-email/
├── README.rb
├── data/
├── mamapedia_users_data_01.csv
├── lib/
├── plugin.rb

Tuttavia, quando riavvio o ricostruisco l’app, non vedo il nuovo plugin nel pannello di amministrazione. Non vedo errori nei log.

Cosa sto sbagliando? Devo fare qualcos’altro?

4 Mi Piace

Inizierei da Sviluppare plugin di Discourse - Parte 1 - Creare un plugin di base.

8 Mi Piace

Ho provato quello, è molto semplice. Ma sfortunatamente non funziona per me.

Ho testato la stessa soluzione in due app diverse. Ecco il file plugin.rb che ho usato:

# name: auto-email
# about: Un plugin super semplice per dimostrare come funzionano i plugin
# version: 0.0.1
# authors: Xavier Garzon

Ho anche controllato la mia cartella dei plugin nel container (/var/www/discourse/plugins) e sembra che il mio plugin non venga copiato. Forse è parte del problema.

Per questo secondo test, ho anche provato:

./launcher rebuild app --clean

e

./launcher restart app

Questa è la versione che sto eseguendo:
3.4.0.beta4-dev
(9f41ce7fce)

1 Mi Piace

Hai messo il tuo plugin in un repository GitHub?

Non puoi semplicemente inserire un plugin.rb in /lib, deve essere nella cartella dei plugin e, in produzione, devi aggiungerlo tramite GitHub come descritto in Installa plugin su un sito self-hosted

Sì. Se non c’è, non c’è.

Vuoi davvero leggere tutti quegli argomenti sui plugin. Vuoi anche fare i tuoi test in un ambiente di sviluppo.

4 Mi Piace