問題タブ [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 - Railsエンジンをテストするときにダミーアプリケーションを再起動しますか?
新しい Rails エンジンで作業していて、テスト中に再起動する必要があります。アプリケーションが既に初期化されているためDummy::Application.initialize!
、動作しないため、Rails は同じインスタンスを返しました。
after_initialize
エンジンブロックが再び実行されるようにする必要があります>
ruby-on-rails-3 - Rails 3.1:エンジンとマウント可能なアプリ
Railsエンジンとマウント可能なアプリの違いを誰かが理解するのを手伝ってもらえますか?Rails 3.1では、「 rails newplugin___ 」コマンドを使用してどちらかを作成できます。
いつ一方を他方に対して使用したいですか?たとえば、エンジンを宝石としてパッケージ化できることは知っています。マウント可能なアプリの場合はそうではありませんか?他にどのような違いがありますか?
ruby-on-rails - Rails エンジンの構成
サードパーティで OAuth メカニズムを処理する Rails Engine を開発しています。すべての構成を Struct 属性に入れたいので、すべてのエンジン構成データが一緒に保存されます。
構成の一部は、アプリケーション レベルの初期化子で定義する必要があります。
ただし、アプリケーション初期化子のロード中に config.thirdparty がまだ定義されていないため、失敗します。
ruby-on-rails - Rails 3とRefineryCMSは、同じGitリポジトリから複数のgemをどのように管理およびリリースしますか?
私は、その機能のほとんどが高度に専門化されたエンジンに委任されるRailsアプリケーションの設計を実験しています。ただし、おそらく10個程度のエンジンがあり、10個の異なるgemとGitリポジトリを管理する必要は絶対にありません。
RailsとRefineryCMSはどちらも、すべてのサブモジュールを1つのgitリポジトリに格納しているように見えますが、どういうわけか、それらを独立したgemとしてリリースするだけでなく、Railsの場合は単純なものですべてを要求しますrequire
'rails/all'
。
もちろん私はソースコードを閲覧しましたが、より経験豊富な目を使って助けを求めることができます...このマルチジェム、ワンリポジトリアーキテクチャがどのように機能するかについて誰かに教えてもらえますか?
ruby-on-rails-3 - Rails3のプラグイン/エンジンでパーシャルをレンダリングするための検索順序を変更するには?
Rails3 でモジュラー プロジェクトを作成していますが、この問題があります。
私はメイン プロジェクトを持っており、その一部をさまざまなカスタマイズで実装したいので、エンジンを使用しているので、次のようにしました。
しかし、action1.html.erb から呼び出す場合
最初の _header.html.erb が呼び出されます。myplugin の「前」に呼び出したいと思います。myplugin のビューに対してのみ行うことはできますか?
これにより、多くの無駄な「名前空間」を防ぐことができます。
ruby-on-rails - エンジンからRailsアプリのルートをオーバーライドするには?
Railsエンジンを統合しようとしているRailsアプリがあります。
ホスト アプリには、すべてのルートをキャッチするものがあります。
アプリケーションがすべてのルートをキャッチした後、エンジンのルートが読み込まれるようです。
これまでのところ、すべてがルートにヒットし、/engine/envs
すべてのルートをキャッチするアプリケーションによってキャッチされています。しかし、エンジンの後にジャムルートがロードされていることがわかり、それらが引っかかっているとは思えません。アプリのルートをオーバーライドする方法はありますか?
ruby-on-rails-3 - Rails3 Engine ヘルパーのオーバーライド
だから私は Rails 3.0 Engine (gem) を持っています。
app/controllers/advanced_controller.rb でコントローラーを提供し、app/helpers/advanced_helper.rb で対応するヘルパーを提供します。(もちろん、いくつかのビュー)。
これまでのところ、コントローラー/ヘルパー/ビューは、gem を使用してアプリケーションで自動的に利用できるようになりました。
しかし、ローカル アプリケーションがエンジン内の AdvancedHelper からヘルパー メソッドを選択的に上書きできるようにしたい (理想的には「super」を呼び出せるようにしたい)。それは、完全に合理的な (そして私は一般的だと思う) 設計を許可したいのはかなり合理的なことでしょうか?
問題は、それを機能させる方法が見つからないようです。アプリケーションが独自の app/helpers/advanced_helper.rb (AdvancedHelper) を定義している場合、エンジンからのものはまったく読み込まれません。そのため、(super を呼び出さずに) そこにあるすべてのヘルパー メソッドを置き換えたい場合に機能します。 、ただし、オーバーライドしたいだけの場合はそうではありません。
そういうのは実際には意味があるので、別の名前を選びます。私のローカルのものを ./app/helpers/local_advanced_helper.rb (LocalAdvancedHelper) と呼びましょう。このヘルパーは読み込まれます。元のエンジンの AdvancedHelper にないメソッドをそこに配置すると、ビューで使用できます。
しかし、エンジンの AdvancedHelper と同じ名前のメソッドをそこに配置すると、ローカルのメソッドは決して呼び出されません。AdvancedHelper (エンジンから) が LocalAdvancedHelper (アプリから) よりもコール チェーンの前にあるようです。確かに、デバッガーをオンにして helpers.ancestors を見ると、まさにそれが起こっていることであり、先祖チェーンで必要な逆の順序になっています。したがって、AdvancedHelper (エンジンから) は理論的には「super」を呼び出して (アプリから) LocalAdvancedHelper を呼び出すことができますが、もちろんそれを行う意味はあまりありません。
でもやりたいことが… できない。
アプリがエンジンからのヘルパー メソッドを選択的にオーバーライドできるこのデザインを提供する方法はありますか?
なぜそれがこのように機能しているのか、誰にも説明がありますか? Rails の実際のソース コードを調べてみましたが、すぐにわからなくなってしまいました。この部分のコードは、非常に抽象的で、いくつかの場所に分かれています。
これはかなり難解な質問です。私は悲観的ですが、誰もが何らかのアイデアを持っていると思います。驚かせてください!
== 更新
さて、Rails コードのどの部分がどこで呼び出されているかを理解するために、各ヘルパーに「def self.included ; debugger ; end」を配置し、デバッガーで例外を発生させてスタック トレースを表示します。
Rails のコードはあちこち飛び回っていて、かなり混乱しています。
しかし、「標準」名のヘルパー (WidgetController の WidgetHelper など) は、特定のコントローラーの「マスター」ビュー ヘルパー モジュールに含めるために、他のヘルパーとは異なる Rails コードによって呼び出されることは明らかです。ヘルパーに別の名前を付けてから、("helper OtherNamedAdvancedHelper") を使用してコントローラーに手動で含めるかどうか疑問に思っています。それによってロード順序が変更される場合があります。
ruby-on-rails - Ruby on Rails 3 - ビューとコントローラーを使用してプラグインまたはエンジンを作成しますか?
RoR プログラミングを始めたばかりで、単純な Rails アプリ用のビューとコントローラーを備えたプラグイン/エンジンを作成したいと考えています。公式のRails Wikiでプラグインの作成に関するチュートリアルを見つけましたが、残念ながらRails 2用です:(
では、RoR 3 アプリ用のビューとコントローラーを備えたプラグインを作成するにはどうすればよいでしょうか。
ruby-on-rails-3 - Ruby OnRails3のレールとエンジンの違い
私はこれらの議論に関するいくつかの文書を読みましたが、それらが何であるか、それらの違いは何か、そしてそれらの1つが私のニーズに合うかどうかを明確に理解していませんでした。
他のアプリケーションにプラグインできるアプリケーションを作成する必要があり、それを他のアプリケーションにgemとして含めたいと思います。基本的に、いくつかのモデルが必要です。1つはコントローラーで、ビューはありません。さらに、初期化、ホスティングアプリとジェネレーターからの構成パラメーターのサポートが必要です。
私は正しい道を進んでいますか?
それを行う方法を理解するために私は何を読むべきですか?
アップデート:
afの詳細がたくさんあるとても素敵な記事がここにあります。
基本的に:
RailtieはRailsフレームワークのコアであり、Railsを拡張したり、初期化プロセスを変更したりするためのいくつかのフックを提供します。
Rails :: Engineは、いくつかの初期化子がすでに設定されているRailtieにすぎません。また、Rails::ApplicationとRails::Pluginはエンジンであるため、ここで説明するのと同じ構成を3つすべてで使用できます。
ruby-on-rails - Rails3 エンジン: Gem (paperclip と inherited_resources) が読み込まれていない
Rails3 エンジンの gemfile に、次のように追加しました。
これもgemspecに追加しました:
次に、エンジンとクライアント アプリの両方に対して bundle install を実行し、最初にペーパークリップをテストするためにクライアント アプリのコンソールを起動しました。
OK、それで、paperclip gem の has_attached_file メソッドが見つからないようです。なんで?わからない。
inherited_resources に移ると、scaffold で生成されたコントローラーを次のように変更しました。
そして、(ログで)私が迎えられたインデックスページをロードします:
私の質問は、なぜこれらが機能しないのですか? エンジン、ネームスペース、および gem のロードについて、私がまったく気付いていない何かがあるというのが私の予感です。