neounix
(Dark Matter)
2020 年 4 月 29 日午後 2:45
44
私には良いスタートに思えます。あとは、これで実際に面白いことができるようになるのを学ぶだけです。
最初の計画は、データベースをクエリするコードを書いて、post_custom_fields テーブルから必要な値を取得し、それをトピックページで使用することです。これは、ベテランのモデレーターチームからリクエストされた小さな機能です。
明日は Git からプルして、他のプラグインからのサンプル DB コードを探し始め、どこまで進められるか見てみます。
@j.jaffeux さん、ありがとうございました。
小さな一歩でも積み重ねることが大切です。私のような初心者向けの Discourse プラグイン作成者にとって、このようなジェネレーターがあることは非常に感謝しています。下の画像をご覧いただければ、開発を待っているのがお分かりいただけるでしょう:
長年にわたり、vBulletin 用の無数のプラグインを作成してきましたので、Discourse 用のシンプルなプラグインを作ることにとてもワクワクしています。信じてください。
「いいね!」 2
neounix
(Dark Matter)
2020 年 8 月 11 日午前 6:35
45
@j.jaffeux さん
こんにちは。Discourse プラグインについて学んでいる最中です。今日、このプラグインジェネレーターに戻り、macOS の開発環境で試してみました。アプリは正常に動作しており、Ruby や Rails の学習、小さなプラグインの開発を多く行っています。
# cd /var/Tim/Discourse/plugins
# rails g plugin DiscourseRacoon
# bundle exec 'rails s'
すべて順調に進み、プラグインも正常にインストールされました。
しかし、以下のルートにアクセスすると動作しません。
http://localhost:3000/discourse_racoon
基本的なプラグインを生成した後、プラグインのルートとコントローラーは OOTB(すぐに使える状態)で動作するはずだと考えていましたが、間違っていますでしょうか?この場合のプラグイン名は DiscourseRacoon です。
いくつかのオンラインリファレンスを確認したところ、ルートが存在するか確認するよう指示されていました。そこで routes.rb を確認したところ、ルートが定義されていました。また、discourse_racoon_controller.rb も確認し、コントローラーに index メソッド(アクション)が存在することも確認しました。
申し訳ありませんが、より興味深いプラグイン開発と Discourse の扱いにまだ苦労しています。どこが間違っているのでしょうか?デバッグの次のステップについてのアドバイスはありますか?
よろしくお願いいたします。
「いいね!」 1
j.jaffeux
(Joffrey Jaffeux)
2020 年 8 月 11 日午前 6:39
46
/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
neounix
(Dark Matter)
2020 年 8 月 11 日午前 6:45
47
@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
neounix
(Dark Matter)
2020 年 8 月 12 日午前 4:27
48
こんにちは、
このジェネレーターで「Hello World」プラグインを生成し、Ruby の「ファイルへの書き込み」に関するステートメントをいくつか追加して、Rails のライフサイクルを観察しました。その結果、Rails コントローラーが期待通りに動作していないことがわかりました(ログ出力が行われず、無視されている様子でした)。
デバッグを行った結果、Rails コントローラーを1つ上のディレクトリに移動させることで、期待通りに動作させることができました。
さらに、メインのインデックスページ用の JavaScript/Ember コントローラーとテンプレートを追加し、すべてのテンプレートに HTML と CSS を追加しました。また、クッキーを読み込んでテンプレートをハイライト表示するための JavaScript コードも追加しました。
例えば、Rails プラグインジェネレーターで生成されたプラグインをいくつか変更した後の様子は以下の通りです:
http://localhost:3000/hello-world/
詳細とスクリーンショットについては、以下をご覧ください:
Discourse
Discourse Plugins
Discourse has a rails plugin generator which generates a basic Discourse plugin scaffolding. So, I created a "hello world" plugin with this generator using rails g plugin hello-world and added a bunch of Ruby statements to each .rb file to...
Reading time: 2 mins 🕑
Likes: 2 ❤
最後に、この Rails プラグインジェネレーターを提供してくれた @j.jaffeux さんに感謝申し上げます。Rails コントローラーのデバッグに多くの時間を費やし、Rails のライフサイクルと JS テンプレート/コントローラーを検証するためのコードを追加して改造する過程を楽しみました。
私の変更が、私のように余暇を使ってプラグイン開発の基礎を学んでいる Discourse ユーザーや、Rails プラグインジェネレーターを利用したい方のお役に立てれば幸いです。
関連情報:
A plugin for debugging the Discourse rails plugin generator
現在、Rails と Discourse プラグイン開発の学習プロセスの一環として、壊れたプラグインのデバッグと修正に熱中しています
「いいね!」 5
pfaffman
(Jay Pfaffman)
2020 年 8 月 12 日午後 7:45
49
これを解決してくれてありがとう、@neounix !これが私のプロジェクトを前進させるための後押しになるかもしれません。
@j.jaffeux さん、これらのファイルを移動させることが推奨される解決策でしょうか?それとも、以下のような方法で含めるべきでしょうか?
load File.expand_path('some-path-here', __dir__)
私は含めることを試みたと思うのですが、その際「何かの欠落」というエラーが発生しました(つまり、間違ったことをしたのだと思い、正確にドキュメント化する価値はないと思われます)。
編集:どうやらコントローラーは /plugin-path にアクセスした際に実際に読み込まれ、実行されるようです。
「いいね!」 3
neounix
(Dark Matter)
2020 年 8 月 13 日午前 12:25
50
こんにちは、@pfaffman さん
当初は、plugin.rb 内で load 文を使って Ruby コントローラーを読み込もうとしましたが、期待通りにログが出力されませんでした。
Ruby コントローラーのテストでは、ファイルシステムにログを出力する Ruby 文を使用してテストし、そのログファイルに対して tail -f を実行して、コントローラーがどのように発火するかを確認しました。
昨日は楽しみのために、Rails コントローラーを使ってすべてのプロセスの ENV 変数を読み取り、それをクッキーに格納し、Ember コントローラーを使ってアプリに書き込むコードを書きました。
本当に面白かったです!
中毒になってしまいました LOL
「いいね!」 3
riking
(Kane York)
2020 年 9 月 10 日午前 12:58
51
neounix:
それは私が学ぶ必要がある Rails の慣習でしょうか?アンダースコアで定義されたすべてのルートがダッシュでアクセスされるというものです。
DiscourseRacoon::Engine.routes.draw do
get "/" => "discourse_racoon#index", constraints: DiscourseRacoonConstraint.new
URL 部分は左側に、Ruby コードの参照は => の右側にあります。_ と - の違いは、エンジンの mount 行で定義されています。
「いいね!」 4
@eviltrout のプラグインガイドの第 4 部 では、プラグインを Discourse のコードベースの外で開発し、plugins ディレクトリにシンボリックリンクを設定することが推奨されています。
eviltrout:
この設定の利点は、プラグインを GitHub にコミットするだけで、その中に含まれる Discourse のコードベースを気にする必要がないことです。変更はプラグイン自体に隔離されます。Discourse のコードを編集する必要がある場合でも、git は変更を個別に追跡します!
プラグインのコードベース用と Discourse 本体用に、エディタのウィンドウをそれぞれ 1 つずつ使うことをお勧めします。これらを別々のものとして捉えた方が扱いやすくなります。
プラグインを別のディレクトリに生成し、必要に応じてシンボリックリンクも設定するために、-d ~/path/to/plugin_src オプションを追加するのは理にかなっているでしょうか?
「いいね!」 1
j.jaffeux
(Joffrey Jaffeux)
2021 年 8 月 20 日午前 8:38
53
申し訳ありませんが、現時点ではこれを非推奨とし、トピックを閉じる可能性があります。
カスタマイズの柔軟性は劣りますが、現在プラグインを立ち上げるための推奨方法は、GitHub - discourse/discourse-plugin-skeleton: Template for Discourse plugins · GitHub をテンプレートとして使用することです(緑色のボタン「USE THIS TEMPLATE」を参照してください)。
こちらの方が、私たちが最新の状態に保つのがはるかに簡単です。
「いいね!」 6