2012-02-18 17 views
1

実稼働サーバーでの資産のプリコンパイルは非常に遅いです。そこで私は開発マシンでそれらを再コンパイルし、Amazon S3にアセットをアップロードすることを決めました。jammit。すべてが行われるが、私はいくつかの否定的問題を抱えています:Rails 3&開発/生産モードでの資産パイプライン

  1. 私はgit制御にpublic/assetsディレクトリを含める必要があります。プロダクションサーバーでpublic/assetsディレクトリが空の場合
  2. 私が開発マシンで資産をプリコンパイルすると、圧縮された形でHTMLに含まれているので、jsコードが重複しています。プリコンパイルされたapplication.jsがこのコードを中断するため、jを変更しても効果はありません。

私の開発プロセスは、以下のステップが含まその方法:私はいくつかの変更に

  • プリコンパイル資産
  • アップロード資産を行い
  • JSやCSSを変更するつもりならば

    1. 削除プリコンパイル資産をto S3 by jammit-s3
    2. アセットを含む変更をコミットしてgitサーバーにプッシュする
    3. 展開カピストラーノによって

    私の質問は以下のとおりです。

    1. は、それは私がpublic/assetsディレクトリにそれを持っている場合application.js圧縮が含まれていない開発環境を設定することは可能ですか?
    2. 空のpublic/assetsディレクトリで動作するように運用環境を設定することはできますか?アセットはS3サーバー上にのみ存在します。あなたが開発モードに切り替える前に、

      bundle exec rake assets:clean 
      

  • 答えて

    1

    この問題は、gitignoreにアセットdirを含めて1つのファイル(public/assets/manifest.yml)を除外することで解決しました。プロダクションサーバは正しく動作します。つまり、config.action_controller.asset_host = "http://assets.example.com"が動作します。それはただmanifest.ymlファイルを必要とする

    2

    は、質問1のために私は実行されている以外の恒久的な解決策を知りません。私は、資産全体のパイプラインをオフにすることなく、開発中の資産を無視できるかどうかを確認することに興味があります。

    # Enable serving of images, stylesheets, and JavaScripts from an asset server 
    config.action_controller.asset_host = "http://assets.example.com" 
    

    それがリモートホストに依存しているので、それは、あなたの資産のディレクトリを無視する必要があります。

    はproduction.rbでは、あなたの2番目の質問のためのオプションがあります。 希望に役立ちます。

    +0

    生産モードの場合は 'config.action_controller.asset_host'を設定しましたが、サーバーはそれがなくても失敗するため、' public/assets'パスにプリコンパイルされたアセットを持っていなければなりません。 – ka8725

    +0

    いくつかの異なる設定同様に。 production.rbを投稿することができますか?あなたがしたこととしなかったことを伝えるのは本当に難しいですから。 Railsのアセットの使用を最小限に抑えるようにしてください: 'config.assets.compile = false' それでは、どうしてもそれらを生成しようとはしません。 – tombruijn

    +0

    また、サーバーはどのように失敗しますか?リモートのasset_hostを登録せず、公開/資産ディレクトリをチェックしますか?それは実際には、アプリやasset_hostからそれらを提供していますか? – tombruijn

    関連する問題