كيف يمكنني تثبيت إضافتي المكتوبة بلغة Ruby؟

لدي ملف CSV يحتوي على رسائل البريد الإلكتروني لمستخدمي Discourse. أحتاج إلى إنشاء برنامج نصي يتم تشغيله يوميًا ويرسل قالب بريد إلكتروني محدد إلى مجموعة محددة من المستخدمين. ثم، أحتاج إلى تشغيل هذا البرنامج النصي كل يوم مع المجموعة التالية من المستخدمين. كيف يمكنني فعل ذلك؟

وفقًا لـ https://ask.discourse.com/ ، أحتاج إلى إنشاء الكود الخاص بي لأتمتة ذلك ووضع الكود والبيانات في مجلد plugins. اقتراح الكود هنا:

# frozen_string_literal: true
# name: auto-email
# about: A custom plugin to send bulk emails using automation and CSV files
# version: 0.3

require 'csv'

after_initialize do
  if defined?(DiscourseAutomation)
    # Define a unique scriptable for the automation
    DiscourseAutomation::Scriptable::AUTO_EMAIL_SCRIPT = "auto_email_script"

    add_automation_scriptable(DiscourseAutomation::Scriptable::AUTO_EMAIL_SCRIPT) do
      # Define fields for the automations UI:
      field :email_template, component: :message # Email body to be sent
      field :csv_file_name, component: :text # Name of CSV file in the "data" folder

      script do |context, fields, automation|
        # Define the path to the data folder
        data_folder_path = Rails.root.join("plugins", "auto-email", "data")

        # Get the CSV file name from the admin automation field
        csv_file_name = fields["csv_file_name"]["value"]
        csv_file_path = File.join(data_folder_path, csv_file_name)

        # Ensure the file exists
        unless File.exist?(csv_file_path)
          Rails.logger.warn("CSV file #{csv_file_path} not found!")
          next
        end

        # Parse the CSV file
        begin
          users = CSV.read(csv_file_path, headers: true).map(&:to_hash)
        rescue StandardError => e
          Rails.logger.error("Error reading CSV file (#{csv_file_name}): #{e.message}")
          next
        end

        # Get the email message content from the automation field
        email_body = fields["email_template"]["value"]

        # Iterate through users from the CSV and send emails
        users.each do |user_data|
          email = user_data["email"] || user_data["normalized_email"]
          user = User.find_by_email(email)
          
          if user
            begin
              # Send an automated email using SystemMessage
              SystemMessage.new(user).send_email(
                "custom_email_template", # Ensure this email template exists
                message_body: email_body
              )
              Rails.logger.info("Email sent to: #{email}")
            rescue StandardError => e
              Rails.logger.error("Failed to send email to #{email}: #{e.message}")
            end
          else
            Rails.logger.warn("No user found with email: #{email}")
          end
        end
      end
    end
  end
end

وهيكل المكون الإضافي الخاص بي يبدو كالتالي:
/var/discourse/plugins/auto-email/
├── README.rb
├── data/
├── mamapedia_users_data_01.csv
├── lib/
├── plugin.rb

ومع ذلك، عند إعادة تشغيل التطبيق أو إعادة بنائه، لا أرى المكون الإضافي الجديد في لوحة الإدارة. لا توجد أخطاء في السجلات.

ماذا أفعل بشكل خاطئ؟ هل أحتاج إلى فعل شيء آخر؟

4 إعجابات

سأبدأ بـ Developing Discourse Plugins - Part 1 - Create a basic plugin.

8 إعجابات

لقد جربت هذا، إنه بسيط جدًا. لكن للأسف لا يعمل معي.

لقد اختبرت نفس الحل في تطبيقين مختلفين. إليك ملف plugin.rb الذي استخدمته:

# name: auto-email
# about: A super simple plugin to demonstrate how plugins work
# version: 0.0.1
# authors: Xavier Garzon

لقد تحققت أيضًا من مجلد الإضافات الخاص بي في الحاوية (/var/www/discourse/plugins) ويبدو أنه لم يتم نسخ الإضافة الخاصة بي. ربما هذا جزء من المشكلة.

لهذا الاختبار الثاني، حاولت أيضًا:

./launcher rebuild app --clean

و

./launcher restart app

هذا هو الإصدار الذي أقوم بتشغيله:
3.4.0.beta4-dev
(9f41ce7fce)

إعجاب واحد (1)

هل وضعت المكون الإضافي الخاص بك في مستودع GitHub؟

لا يمكنك ببساطة وضع ملف plugin.rb في /lib، يجب أن يكون في مجلد plugins، وفي بيئة الإنتاج، تحتاج إلى إضافته عبر GitHub كما هو موضح في تثبيت المكونات الإضافية على موقع مستضاف ذاتيًا

نعم. إذا لم يكن موجودًا هناك، فهو غير موجود.

تريد حقًا قراءة كل تلك المواضيع المتعلقة بالمكونات الإضافية. تريد أيضًا إجراء اختباراتك في بيئة تطوير.

4 إعجابات