2012-03-12 10 views
1

私はBlogと呼ばれるRails Mountable Engineを持っています。Railsエンジンがアセット・プリコンパイルでロードされていません

モジュール内には、root_pathというメソッドがあります。モジュールは、エンジンのルートパスをロードします。

module Blog 
    def self.root_path 
    Engine.routes.url_helpers.root_path 
    end 
end 

RailsエンジンのJavascriptアセットの1つで、erb構文を使用してエンジンのルートURLをロードします。次の行のように:

url = <%= Blog.root_path %> 

私は実行し、rake assets:precompile、私のアプリの内部で、私はモジュールは、このような方法が含まれていないというエラーを取得します。アセットをあらかじめコンパイルする前に、エンジンライブラリをロードしていないようです。

エラーは次のとおりです。

undefined method `root_path' for #< Module:0xc185e14> 

答えて

2

ライアンの回答が役に立ったにもかかわらず、私がエラーを受けていた理由ではありませんでした。

理由は私の設定/ application.rbで私のアプリが起動されていないので、私は初期化のための初期化を設定していました。

Railsは述べてはっきりガイド:その場合にはテンプレートがアプリケーションを見ることができないのに速く資産プリコンパイルのために、あなたは部分的に、設定/ application.rbにfalseにconfig.assets.initialize_on_precompileを設定することで、アプリケーションをロードすることができます*

オブジェクトまたはメソッド*

+0

ええ、Rails Enginesの実装では嫌な思いをします。 ;) – Macario

+0

アセットパイプラインは通常、解決するよりも多くの問題を引き起こします。 – Macario

2

Railsのエンジンは、ルーティングプロキシを通じてルーティングヘルパーを提供します。このようにroot_pathメソッドを定義する必要はありません。 Engines Guideを読んで、詳細については

blog.root_path 

代わりに、あなたのエンジンの名前である方法と、このようなことのルーティングヘルパーを呼び出します。

+0

私はrakeアセットを実行すると、未定義のローカル変数またはメソッド名 "blog"を取得します:プリコンパイル。アプリでは、正常に動作します。しかし、私がレーキ・タスクを実行したときではありません。 – e3matheus

+0

はい、あなたのアプリケーションのコントローラ/ビュー内で正常に動作しますが、アセットで参照するべきではありません。エンジンパスをアセットにアセット化する場合は、[少し複雑です](https://github.com/kunalchaudhari/spree/blob/266180a69daee79fe462bd8747b92066a34f0ec2/core/app/assets/javascripts/store/helpers.js.erb) 。 –

関連する問題