4

heroku で私の Rails アプリを使用して、すべてのこと (アセット、データベース、アップロード) に Amazon を使用することを検討しています。

資産が私を最も悩ませています... Herokuのヘルプファイルには、ファイルをダンプするバケットを作成し、次のように参照するように書かれています: http://s3.amazonaws.com/bucketname/filename。これにより、開発のための2つのオプションが得られます(私が考えることができます):

  1. ローカルで開発するアセットを .gitignore で見ないようにして、すべての参照をスクラブしたり、ヘルパーを書いたりした後で、それらのファイルを AWS バケットにアップロードするようにすることはできますか?
  2. 常にすべてを自分のバケットに保存し、ローカル開発中に自分のバケットを呼び出さなければなりません。

これを構成して、アプリのアセットを app/assets フォルダーにローカルに保存し、heroku にプッシュ/デプロイするときにアセットを自動的に amazon にプッシュすることができるかどうか疑問に思っています。

これは、Amazon を使用した初めての heroku rails アプリです。このような構成方法と適切なワークフローについて、私の知性を侮辱してください。

ありがとう。

4

2 に答える 2

2

asset_sync宝石を試してみてください。これにより、アセット パイプラインをローカルで使用し、Heroku にプッシュした後、S3 から (オプションで Cloudfront 経由で) アセットを提供できます。

通常、Heroku のコンパイル手順では構成変数へのアクセスが提供されないことに注意してください。S3asset_syncにプッシュするには、これらの構成変数が必要です。これに対する解決策 (そして実際には asset_sync HOWTO 全体) は、Using a CDN Asset Host with Rails 3.1ガイドに掲載されています。

このアプローチの欠点は、アプリの 12 要素の原則の一部に違反していることです。具体的には、「ビルド、リリース、実行」に関係しています。これには、いくつかのマイナスの結果があります。たとえば、heroku releases:rollbackアプリケーションはロールバックされますが、アセットの再コンパイルと再アップロードは行われません。

于 2012-10-28T15:17:42.663 に答える
0

Rails 3 では、Rails アセット パイプラインを使用して、アセットにさまざまな構成を設定できます。基本的に、config/environments/production.rbファイルで次のようなことを行います。

    ActionController::Base.asset_host = "/path/to/s3/bucket"

ローカルでは、Rails サーバーからアセットを直接提供し続けます。展開に関しては、aws-s3gem を使用して rake タスクを作成するか、または を使用してこれを自動化できるはずですcapistrano。もう 1 つのオプションは、CDN を使用して、運用サーバー上のアセットを検索するように構成することです。これにより、アセットを個別にデプロイする必要がなくなります。

于 2012-10-28T09:40:03.460 に答える