8

これまで何度も asset_sync gem を使用して大きな成功を収めてきましたが、Rails 4.0.3 プロジェクトで使用すると問題が発生したようです。

アセットはターゲット ディレクトリにアップロードされ、ハッシュされ、gzip されます (私はデフォルトの「アセット」を使用しました) が、ステージング/運用環境でアプリケーションを実行すると、パスが正しくありません。

それらは次の形式を取ります。

S3_DOMAIN.com/stylesheets/application.css

それ以外の:

S3_DOMAIN.com/assets/application-HASH.css

他の誰かがこの問題を経験しましたか? この動作を元に戻す唯一の方法は、config.assets.compile を true に設定することですが、これは運用環境では機能しません。

関連する構成ファイルは次のとおりです。

  ## environments/staging.rb
  config.serve_static_assets = false
  config.assets.compress = true
  config.assets.js_compressor = :uglifier
  config.assets.css_compressor = :sass
  # Have to set this to true to make asset_sync generate the correct links
  config.assets.compile = false
  config.assets.digest = true
  config.assets.enabled = true
  config.assets.initialize_on_precompile = true
  config.action_controller.asset_host = "//#{Figaro.env.fog_directory}.s3.amazonaws.com"
  config.action_mailer.asset_host = "//#{Figaro.env.fog_directory}.s3.amazonaws.com"
  config.assets.prefix = "/assets"
  config.assets.debug = false
  config.assets.cache_store = :memory_store

##config/asset_sync.yml
defaults: &defaults
  fog_provider: 'AWS'
  aws_access_key_id: "<%= ENV['AWS_ACCESS_KEY_ID'] %>"
  aws_secret_access_key: "<%= ENV['AWS_SECRET_ACCESS_KEY'] %>"
  # To use AWS reduced redundancy storage.
  # aws_reduced_redundancy: true
  # You may need to specify what region your storage bucket is in
  fog_region: <%= ENV['FOG_REGION'] %>
  existing_remote_files: keep
  # To delete existing remote files.
  # existing_remote_files: delete
  # Automatically replace files with their equivalent gzip compressed version
  gzip_compression: true
  # Fail silently.  Useful for environments such as Heroku
  # fail_silently: true

development:
  <<: *defaults
  enabled: false

test:
  <<: *defaults
  enabled: false

staging:
  <<: *defaults
  fog_directory: <%= ENV['FOG_DIRECTORY'] %>

production:
  <<: *defaults
  fog_directory: <%= ENV['FOG_DIRECTORY'] %>
4

2 に答える 2

0

productionRails 4 のモードで関連するすべてのアセットを実行する必要があります。

例えば:

rake assets:precompile RAILS_ENV=production

デフォルトモード(開発)で実行すると、ハッシュが異なるため、レールはハッシュをすべて一緒に除外します。

また、サーバーを起動する前にこれを実行して、ファイルを見つけます。

注: この変更は、開発中にアセットをキャッシュできるようにするためのものだと思います。

于 2014-03-20T02:28:28.017 に答える
0

願わくば、これが私の仲間のプログラマーの友人が頭をぶつけないようにするのに役立つことを願っています:D. 「 digest_path と asset_digest_path はダイジェスト URL を許可しない」 に関するこの質問に回答しましたが、クリックを節約できるようにここに再投稿します。

ファイルを S3 にアップロードしていましたが、マニフェストが Rails によって読み込まれていないことに気づきませんでした。上記および他のスレッドのように、すべてのプロダクション設定を適切に行うことができますが、Rails で読み取れる manifest.json ファイルがない場合でも、/javascript/* (例) の URL が生成されます。

gem の最新バージョンではまだ問題が発生してmulti_jsonいたので、1.7.8 にダウングレードしたところ問題なく動作しました。

gem 'multi_json', '1.7.8'

それは、作成したmanifest.jsonファイルを読み取ることができるようにするためです。rake assets:precompile

マニフェスト ファイルを git にするか、単にデプロイ スクリプトにするかについて、このスプロケット スレッドhttps://github.com/rails/sprockets-rails/issues/107で議論があります。次の場所にあります。

/public/assets/manifest.json 

または自分で指定する

config.assets.manifest = '...'

それは非難されるかもしれないし、されないかもしれません。

乾杯!

于 2014-04-13T06:28:18.207 に答える