問題タブ [rails-engines]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
ruby-on-rails - Rails Engine をグローバル レイアウトにフックする
私は現在、すべての機能が Rails エンジン内にあるモジュラー Rails アプリを作成しています。最初のエンジンをセットアップしましたが、これまでのところすべて正常に動作しています。app/views/layouts/application.html.haml
今、次のように、現在 でレンダリングされているグローバル ナビゲーションにエンジンをフックする最良の方法は何だろうと思っています。
私が見つけた最も近いものは、deface gem を使用するHookListener
of spreeでした。残念ながら、deface は nokogiri を使用して DOM を解析するため、html/erb 出力でのみ機能しますが、これは最善のアイデアではありません。
ruby-on-rails - マウント可能なエンジンはどのようなパスにマウントされていますか
マウント可能なエンジンのレイアウトの内側から、現在マウントされているパスを知る必要があります。それを行う方法は何でしょうか?
たとえば、私のroutes.rbには次の行が含まれています。
BackendCoreの内部から、「/backend」の値にアクセスする必要があります。
ruby-on-rails - Railties を使用して移行以外のファイルをインストールするにはどうすればよいですか (構成ファイルなど)。
Rails 3.1 を使用しており、Railties を使用してマイグレーションをインストールできます (rake railties:install:migrations FROM=plugin_name を実行)。ただし、いくつかの構成ファイル (.yml など) もコピーする必要があります。これを行うにはどうすればよいですか?
ruby-on-rails-3.1 - アプリはスプロケット経由でエンジンのアセットをロードしません
エンジンを利用してRails 3.1を使用してアプリを書き直そうとしています。どういうわけか、ダミーのテスト アプリがアセットを取得せず、何が原因なのかわかりません。つまり、エンジンのスタイルシートは含まれていません。javascript と同じで、おそらく他のすべてのものです。
ruby-on-rails-3 - アプリケーションコントローラのエンジンルート
メインアプリのアプリケーションコントローラーにbefore_filterフックがあり、次のような動作をします:(フラッシュにリンクを配置するだけでなく、メッセージが表示されますが、質問には関係ありません。ルートにアクセスするだけです。方法)
これはアプリでは正常に機能しますが、作成したエンジンのコントローラーに入ると、例外が発生します
エンジン内では、プレフィックスが付いていない限り、ルートヘルパーはエンジン用であることを理解していますmain_app
したがって、アプリケーションコントローラのメソッドを次のように変更します。
例外を取り除きますが、私は本当にそれをする必要はありません。エンジンにmain_appルートを認識させるための別の解決策はありますか?
編集:
これは、アプリケーションレイアウトがパスヘルパーを呼び出す場合にも発生します。したがって、エンジンがmain_appのレイアウトに統合されるように設計されている場合、この問題はそこでも発生します。
ruby-on-rails - エンジンはなぜ便利なのですか?
Ruby on Rails 3.1 を使用していますが、次のことを知りたいです。
- エンジンはなぜ便利なのですか?
- エンジンは何に役立つでしょうか?
- エンジンを使用するのは一般的な方法ですか?
ruby-on-rails - How to extend Rails Engine's controllers properly?
I am developing Rails plugin (it is 3.1 Engine) called Carrier (https://github.com/stanislaw/carrier).
In one of my rails app I want to extend Carrier's controller with some new methods - fx. add new action #comment_form to Carrier::MessagesController (I want this action only exist in my app - I don't want to add it in Engine - because it is very specific).
Two strategies I see here:
1) I copy {Carrier's plugin root}/app/controllers/carrier/messages_controller.rb file to app/controllers/carrier/ folder of my app, and then extend it (all plugin's original actions are copied to rails app controllers folder too!).
2) More accurate way I want - is just to create {My rails app}/app/controllers/carrier/messages_controller.rb and write only #comment_form method I want Carrier to be extended with.
Expecting that two controllers's content (original from plugin's folder + custom in my rails app having only new #comment_form) will superpose, I tried the second way. But Rails then stopped recognizing all original Carrier's actions (#index, #show, etc...) written in messages_controller.rb from the Carrier plugin's folder and began treating rails app's messages_controller.rb version as the only one (all original actions began treated as empty and thus began rendered through rails conventions default flow).
So my question in general is: How to add new actions to Rails Engines controllers without copying them entirely to Rails app/controllers folder?
UPD
For now I see two solutions which allow extension of engine's controllers without serious hacks (like this gem does: https://github.com/asee/mixable_engines from this thread: Extending controllers of a Rails 3 Engine in the main app)
1) load YourEngine::Engine.config.root + 'app' + 'controllers' + 'your_controller' inside your_controller.rb that is in #{main_app}/app/controller/your_engine folder. Notice load instead of require.
2) Devise way (according to some SO topics suggest): In main app create new controller that subclasses engine's one + edit routes to they point to this new controller.
I am still sure some even better solutions exist. Please correct me if they do!
ruby-on-rails-3 - rails 3.1.1 エンジン - マウント可能なエンジンを使用すると、親アプリのアセット、デフォルト レイアウトにアクセスできますか?
これは実験用です - --full でこれを行うことができることは承知していますが、競合を避けるためにアプリの名前空間の機能が必要でした
アイデアは、認証、共通アイテム、管理画面などを処理するメインアプリを持つことです。次に、エンジンを作成して、次のような機能を追加します。
- クロム
- cms
- ブログ
- ウィキ
- フォーラム
- 等
これらのエンジンは、作成しているアプリの種類に応じて、必要に応じて選択できます。これは可能ですか?
--mountable と --full の両方のオプションを適用しただけですか?
実験中 - 完全なオプション add rspec を使用してから単純な追加を行った場合、問題は発生しますか?
および lib\plugin_name\engine.rb 内
私はすでに --full と --mountable の両方のエンジンを作成しており、いくつかの素晴らしい記事 (以下を参照) を読んでいる人のために最終的に機能する rspec を持っていますが、私が作成しようとしているソリューションに対してこれを行うことのより広い影響について疑問に思いました
私はまだこれで遊んでおり、調査結果を投稿します..
ヘルプ/ディスカッションは大歓迎です。
ご注意ください
- なぜ私はそれをやりたいのか - 一度ビルドして何度も使用する...
- 非技術者/クライアントが「プラグイン/エンジン」を追加することは決して望んでいません-これは純粋にポイント1を楽しませるためです.
私が抱えている問題...
- 最上位アプリでサーバーを実行します。エンジンからコンテンツにアクセスする場合のみ (エラー メッセージで確認できます) ルーティングに問題があります (root_path が定義されていないか、ルートが見つからない) - 親アプリケーションのレイアウトがレンダリングされています。抽出されたエラーのソースで確認できます。 . 進行中ですが、葉巻はまだありません!
参考文献
ruby-on-rails-3 - Rails 3.1 エンジン: /scripts でスクリプトを呼び出す方法
Rails アプリをエンジンにリファクタリングしています。アプリは、エンジンに含めたい /script の python スクリプトに依存しています。
元のアプリ コードは次のとおりです。
このスクリプトは、新しいエンジンのどこに保存する必要がありますか? この新しい場所を反映するために、上記のコード行をどのように書き直しますか?
ありがとう
ジャック
ruby-on-rails - `cache_classes`を`false`に設定すると、バグが修正されます。次はどうする?
Railsアプリにマウント可能なエンジンを追加しています。これは、フォーラムのような機能を提供します(つまり、質問、回答、コメントなどを追加します)。開発ではすべてが正常に機能します。ただし、ステージング/本番環境では、回答を作成しようとするとエラーが発生します。具体的には、CanCanパーミッションエラーです(これは赤いニシンかもしれませんが)。しかし、tiは名前空間または名前の衝突に関連しているように感じますか?
とにかくconfig.cache_classes = false
、環境設定ファイルに設定すると、問題は解決します。しかし、それは本当に物事を遅くするので、それは受け入れられる解決策ではありません。
ここからどこへ行くの?どのクラスをリロードする必要があるかをどのように判断できますか?この問題に対処するための従来の方法は何ですか?
Rails3.1を使用しています。