Rails plugin generator

Мне кажется, это хороший старт. Теперь мне осталось только научиться делать с этим действительно крутые вещи.

Мой первый план — написать код для запроса к базе данных, чтобы получить нужное мне значение из таблицы post_custom_fields и использовать его на странице тем в соответствии с небольшой просьбой нашей команды опытных модераторов.

Завтра я заберу проект из Git и начну искать примеры кода работы с базой данных из других плагинов, чтобы начать работу и посмотреть, насколько далеко смогу продвинуться.

Ещё раз спасибо @j.jaffeux.

Каждая мелочь важна, и наличие такого генератора для начинающих создателей плагинов для Discourse, как я, очень ценно. Вы можете увидеть его внизу, словно умоляющего о разработке:

За годы я написал бесчисленное количество плагинов для vBulletin, поэтому я действительно взволнован возможностью создать несколько простых плагинов для Discourse, поверьте мне.

2 лайка

Привет, @j.jaffeux

Пока продолжаю изучать плагины Discourse, сегодня вернулся к генератору плагинов и попробовал это в среде разработки на macOS, где приложение работает отлично. Я много изучаю Ruby и Rails и создаю небольшие плагины, чтобы учиться:

# cd /var/Tim/Discourse/plugins
# rails g plugin DiscourseRacoon
# bundle exec 'rails s'

Всё кажется в порядке, плагин устанавливается без проблем:

Screen Shot 2020-08-11 at 1.26.36 PM

Но при переходе по адресу:

http://localhost:3000/discourse_racoon

Ничего не работает:

Разве я не прав, предполагая, что маршруты плагина и контроллер должны работать из коробки (OOTB) после создания базового плагина, в данном случае DiscourseRacoon?

Я просмотрел различные онлайн-источники, и они указывали, что нужно проверить наличие маршрута; поэтому я проверил routes.rb — там маршруты определены; также проверил discourse_racoon_controller.rb — в контроллере есть метод index (действие).

Извините, я всё ещё испытываю трудности с более интересной разработкой плагинов и Discourse. Что я делаю не так? Есть ли какие-либо предложения, как мне дальше отлаживать эту проблему?

Спасибо.

1 лайк

Это /discourse-racoon, а не /discourse_racoon

rake routes | grep racoon

                         discourse_racoon          /discourse-racoon                                                           DiscourseRacoon::Engine
        GET  /                      discourse_racoon/discourse_racoon#index
actions GET  /actions(.:format)     discourse_racoon/actions#index
        GET  /actions/:id(.:format) discourse_racoon/actions#show
5 лайков

Привет @j.jaffeux

Спасибо!

Именно так.

Предполагаю, это соглашение Rails, которое мне нужно изучить? Где все маршруты, определённые с использованием нижних подчёркиваний, обращаются через дефисы?

DiscourseRacoon::Engine.routes.draw do
  get "/" => "discourse_racoon#index", constraints: DiscourseRacoonConstraint.new
  get "/actions" => "actions#index", constraints: DiscourseRacoonConstraint.new
  get "/actions/:id" => "actions#show", constraints: DiscourseRacoonConstraint.new
end
1 лайк

Привет,

Я сгенерировал плагин «Hello World» с помощью этого генератора, добавил множество инструкций Ruby для записи в файл и наблюдал за жизненным циклом Rails. Оказалось, что контроллеры Rails работали некорректно: они не выводили логи, что указывало на то, что они игнорировались.

После отладки мне удалось добиться ожидаемого поведения, переместив контроллеры Rails на уровень выше в каталоговой структуре.

Кроме того, я добавил контроллер и шаблон на JavaScript/Ember для главной страницы индекса, внедрил HTML и CSS во все шаблоны, а также добавил JavaScript-код для чтения файлов cookie и подсветки шаблонов.

Например, после нескольких изменений в плагине, сгенерированном генератором плагинов Rails:

http://localhost:3000/hello-world/

Полные детали и скриншоты доступны по ссылке:

В заключение хочу поблагодарить @j.jaffeux за этот генератор плагинов Rails. Мне было очень интересно отлаживать контроллеры Rails и модифицировать их, чтобы получить больше данных для анализа как жизненного цикла Rails, так и JS-шаблонов и контроллеров.

Надеюсь, мои изменения помогут другим, кто, как и я, только начинает изучать основы разработки плагинов для Discourse в свободное время и хочет использовать генератор плагинов Rails.

Также см.:

В настоящее время мне очень нравится отлаживать и исправлять неработающие плагины в процессе обучения разработке плагинов для Rails и Discourse :slight_smile:

5 лайков

Спасибо, что разобрались с этим, @neounix! Возможно, это именно тот толчок, который мне нужен, чтобы сдвинуть мой проект с мёртвой точки.

Привет, @j.jaffeux, является ли перемещение этих файлов рекомендуемым решением, или их следует подключить с помощью чего-то вроде

  load File.expand_path('some-path-here', __dir__) 

Я думаю, что пытался подключить их, но тогда получил ошибку о отсутствующем… чём-то (поэтому я предполагаю, что сделал что-то не так, и документировать это точно не стоит).

РЕДАКТИРОВАНИЕ: Похоже, что контроллер действительно загружается и выполняется при переходе по адресу /plugin-path.

3 лайка

Привет @pfaffman

Я изначально пытался загрузить контроллеры Ruby с помощью операторов load в файле plugin.rb, но они не регистрировались так, как ожидалось.

При тестировании контроллеров Ruby я использовал операторы Ruby для записи логов в файловую систему и запускал tail -f на этом файле логов, чтобы проверить, как срабатывают контроллеры.

Для развлечения вчера я закончил день, написав код для чтения всех переменных окружения процесса в cookie с помощью контроллера Rails и записи их в приложение с помощью контроллера Ember.

Очень увлекательно!

Я зависим, LOL

3 лайка

Часть URL находится слева, ссылка на код Ruby — справа от =>. Различие между _ и - определяется в строке mount движка.

4 лайка

В части 4 руководства по плагинам от @eviltrout рекомендуется разрабатывать плагин вне кодовой базы Discourse и создавать символическую ссылку в директории plugins.

Имеет ли смысл добавить опцию -d ~/path/to/plugin_src для создания плагина в другой директории и, возможно, также для настройки символической ссылки?

1 лайк

Извините, но я, возможно, устарею это и закрою тему на данный момент.

Хотя это и менее гибко в плане настройки, наш предпочтительный способ начать работу над плагином сейчас — использовать GitHub - discourse/discourse-plugin-skeleton: Template for Discourse plugins · GitHub в качестве шаблона (см. зелёную кнопку ИСПОЛЬЗОВАТЬ ЭТОТ ШАБЛОН).

Для нас гораздо проще поддерживать это в актуальном состоянии.

6 лайков