0

私の Rails アプリは、1 日に 1 回一連の xml フィードを取得し、それらをデータベースにロードしてから、それらを集約して表示します。ページを静的ファイルとして出力し、フロントエンド サーバー (私の場合は nginx) によって直接提供されるようにすれば、サーバー メモリを節約できると考えています。IRC ルームで尋ねたところ、レールを使用せず、rake タスクを使用してファイルを作成するように言われました。しかし、これを行うための最も簡単な方法は何だろうと思っています。レイアウト、アセット ファイル、およびコンテンツは明らかにレール内の別の場所にあるため、レイアウトとコンテンツを結合してから css/javascript を挿入する必要があると思います。

どんな考え/アイデアも大歓迎です。

【解決済み】

rake タスクの render_to_stringの例を使用することになり、rake タスク内で次のコードを取得するためにいくつかの調整を行いました。

views_path = Rails.root.to_s + "/app/views"
av = ActionView::Base.new(views_path)
av.class_eval do
  include ApplicationHelper
end

products = Product.all
a = av.render(:template => "products/show", :layout => "layouts/application", :locals => { :@products => products } )

これにより、テンプレートとレイアウトの両方がレンダリングされ、コントローラーを使用する場合と同様に、テンプレート内で @products インスタンス変数を使用できるようになります。

次に、レンダリングの出力をファイルに書き込むだけです。

4

2 に答える 2

0

おそらく仲介者またはジキルを使用できますか?

私は仲介者のみを使用しましたが、レーキ タスクとサポート スクリプトを使用して最新の xml フィードを取得し、それを仲介者のデータ ディレクトリ (つまりdata/feeds.yml) に貼り付けてから、既存のレイアウトを使用してその yaml ファイルをレンダリングすることができます。Middleman と Rails は、レンダリングなどで多くの類似技術を共有しています。

レイアウトを少し変更する必要があります。

必要に応じて、yaml を別のものに置き換える gem を見つけることができるでしょう。

于 2012-06-02T05:59:11.013 に答える
0

このようなタスクには、Rails のビルトイン キャッシング メカニズムを使用できます。

別のスタック オーバーフローの投稿があり、rake タスクなどから手動でそのキャッシュを書き込むコードをビルドする方法のサンプル コードを示しています。

于 2012-06-01T17:51:08.637 に答える