2

コントローラーで render_to_string を使用して html ファイルを作成し、send_data を使用して html ファイルをユーザーに送信しました。それはうまく機能し、返されたファイルは、ブラウザーで右クリックしてページのソースを表示したときに表示される html と一致します。ただし、html ファイルには、app/assets フォルダーに存在しない css ファイルと .js ファイルへのリンクがあります。

たとえば、html ファイルには application.css へのリンクがありますが、app/assets フォルダーには application.css.scss しかありません。または別の例。lightbox.css の代わりに lightbox.css.erb。

また、html の一部のパスが間違っています。たとえば、画像は app/assets/images にありますが、html は app/assets を探しています。生成されたhtmlをnokogiriで編集するだけなのでパスは問題ないのですが、なぜ違うのか気になります。

これは私がやりたいこととほとんど同じですrails:「ページを名前を付けて保存」動作をエミュレートします

html を別の方法で取得していて、何らかの理由で探しているアセットが見つからないことを除いて。前に示したように、html は有効に見えます。ファイルを開くと、html からのテキストが表示されますが、リンク パスを変更するまで画像やアセットは表示されません。

私が読んだことによると、Rails は scss を css に変換し、erb ファイルを js または html にレンダリングします。ただし、これらのファイルはディレクトリのどこにも見つかりません。Rails アプリから独立して静的 html ファイルを表示するために必要なファイルを生成するにはどうすればよいですか?

Rails 3.2.2 と jruby 1.6.7 (ruby 1.9.2) を使用しています

4

1 に答える 1

1

Rails アプリが本番モードにデプロイされる前に、通常、すべてのアセット (css、javascript、および画像) はプリコンパイルされ、Rails でレンダリングされた html ページがアセットを探す public ディレクトリに配置されます。

開発モードでは、この事前コンパイルは通常行われませんが、必要に応じて行うことができます。コンパイルされたアセットを生成するには、rake assets:precompile. これにより、アセットがコンパイルされ、「フィンガープリント」され、パブリック フォルダーに配置されます。「フィンガープリント」とは、アセットのファイル コンテンツに基づいてハッシュを生成し、そのハッシュをアセットのファイル名に配置することを意味します。これにより、ファイル名を読み取るだけで、アセットのコンテンツが変更されたかどうか、いつ変更されたかを判断できます。

このコマンドを実行した後、Rails アプリから独立して HTML ページとこれらのアセットを提供できる新しいディレクトリ (Rails アプリの外部) にアセットをコピーまたは移動できます。コンパイルされたアセットは一般に開発モードではあまり役に立たないため、パブリック ディレクトリから削除することもできます。

背景については、Asset Pipelineについて読みます。

于 2012-07-13T22:34:15.930 に答える