Мне кажется, это хороший старт. Теперь мне осталось только научиться делать с этим действительно крутые вещи.
Мой первый план — написать код для запроса к базе данных, чтобы получить нужное мне значение из таблицы post_custom_fields и использовать его на странице тем в соответствии с небольшой просьбой нашей команды опытных модераторов.
Завтра я заберу проект из Git и начну искать примеры кода работы с базой данных из других плагинов, чтобы начать работу и посмотреть, насколько далеко смогу продвинуться.
Каждая мелочь важна, и наличие такого генератора для начинающих создателей плагинов для Discourse, как я, очень ценно. Вы можете увидеть его внизу, словно умоляющего о разработке:
За годы я написал бесчисленное количество плагинов для vBulletin, поэтому я действительно взволнован возможностью создать несколько простых плагинов для Discourse, поверьте мне.
Пока продолжаю изучать плагины Discourse, сегодня вернулся к генератору плагинов и попробовал это в среде разработки на macOS, где приложение работает отлично. Я много изучаю Ruby и Rails и создаю небольшие плагины, чтобы учиться:
# cd /var/Tim/Discourse/plugins
# rails g plugin DiscourseRacoon
# bundle exec 'rails s'
Всё кажется в порядке, плагин устанавливается без проблем:
Разве я не прав, предполагая, что маршруты плагина и контроллер должны работать из коробки (OOTB) после создания базового плагина, в данном случае DiscourseRacoon?
Я просмотрел различные онлайн-источники, и они указывали, что нужно проверить наличие маршрута; поэтому я проверил routes.rb — там маршруты определены; также проверил discourse_racoon_controller.rb — в контроллере есть метод index (действие).
Извините, я всё ещё испытываю трудности с более интересной разработкой плагинов и Discourse. Что я делаю не так? Есть ли какие-либо предложения, как мне дальше отлаживать эту проблему?
Предполагаю, это соглашение 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
Я сгенерировал плагин «Hello World» с помощью этого генератора, добавил множество инструкций Ruby для записи в файл и наблюдал за жизненным циклом Rails. Оказалось, что контроллеры Rails работали некорректно: они не выводили логи, что указывало на то, что они игнорировались.
После отладки мне удалось добиться ожидаемого поведения, переместив контроллеры Rails на уровень выше в каталоговой структуре.
Кроме того, я добавил контроллер и шаблон на JavaScript/Ember для главной страницы индекса, внедрил HTML и CSS во все шаблоны, а также добавил JavaScript-код для чтения файлов cookie и подсветки шаблонов.
Например, после нескольких изменений в плагине, сгенерированном генератором плагинов Rails:
В заключение хочу поблагодарить @j.jaffeux за этот генератор плагинов Rails. Мне было очень интересно отлаживать контроллеры Rails и модифицировать их, чтобы получить больше данных для анализа как жизненного цикла Rails, так и JS-шаблонов и контроллеров.
Надеюсь, мои изменения помогут другим, кто, как и я, только начинает изучать основы разработки плагинов для Discourse в свободное время и хочет использовать генератор плагинов Rails.
Также см.:
В настоящее время мне очень нравится отлаживать и исправлять неработающие плагины в процессе обучения разработке плагинов для Rails и Discourse
Спасибо, что разобрались с этим, @neounix! Возможно, это именно тот толчок, который мне нужен, чтобы сдвинуть мой проект с мёртвой точки.
Привет, @j.jaffeux, является ли перемещение этих файлов рекомендуемым решением, или их следует подключить с помощью чего-то вроде
load File.expand_path('some-path-here', __dir__)
Я думаю, что пытался подключить их, но тогда получил ошибку о отсутствующем… чём-то (поэтому я предполагаю, что сделал что-то не так, и документировать это точно не стоит).
РЕДАКТИРОВАНИЕ: Похоже, что контроллер действительно загружается и выполняется при переходе по адресу /plugin-path.
Я изначально пытался загрузить контроллеры Ruby с помощью операторов load в файле plugin.rb, но они не регистрировались так, как ожидалось.
При тестировании контроллеров Ruby я использовал операторы Ruby для записи логов в файловую систему и запускал tail -f на этом файле логов, чтобы проверить, как срабатывают контроллеры.
Для развлечения вчера я закончил день, написав код для чтения всех переменных окружения процесса в cookie с помощью контроллера Rails и записи их в приложение с помощью контроллера Ember.