Rails app not loading assets on elastic beanstalk

2019-07-06 03:00发布

For context, I essentially followed this guide to get my rails app set up: https://medium.com/@jatescher/how-to-set-up-a-rails-4-2-app-on-aws-with-elastic-beanstalk-and-postgresql-3f9f29c046e2

My app is now running on AWS: http://ems-heroes-dev.elasticbeanstalk.com/

64bit Amazon Linux 2015.03 v2.0.1 running Ruby 2.2 (Puma)

However, I can't get any of my assets to load.

Here is my config/environments/production.rb:

EmsHeroes::Application.configure do
  config.cache_classes = true
  config.eager_load = true
  config.consider_all_requests_local       = false
  config.action_controller.perform_caching = true
  config.serve_static_assets = true

  # Compress JavaScripts and CSS.
  config.assets.js_compressor  = :uglifier
  config.assets.compress  = true
  config.assets.compile = true

  # Bower asset paths
  root.join('vendor', 'assets', 'components').to_s.tap do |bower_path|
    config.sass.load_paths << bower_path
    config.assets.paths << bower_path
  end
  # Precompile Bootstrap fonts
  config.assets.precompile << %r(bootstrap-sass/assets/fonts/bootstrap/[\w-]+\.(?:eot|svg|ttf|woff2?)$)
  # Minimum Sass number precision required by bootstrap-sass
  ::Sass::Script::Value::Number.precision = [8, ::Sass::Script::Value::Number.precision].max

  config.less.paths << "#{Rails.root}/lib/less/protractor/stylesheets"
  config.less.compress = true

  # Generate digests for assets URLs.
  config.assets.digest = true
  config.assets.enabled = true

  # Version of your assets, change this if you want to expire all your assets.
  config.assets.version = '1.0'

  # Specifies the header that your server uses for sending files.
  # config.action_dispatch.x_sendfile_header = "X-Sendfile" # for apache
  config.action_dispatch.x_sendfile_header = 'X-Accel-Redirect' # for nginx

  # Force all access to the app over SSL, use Strict-Transport-Security, and use secure cookies.
  config.force_ssl = false
  config.log_level = :info
  config.i18n.fallbacks = true
  config.active_support.deprecation = :notify
  config.log_formatter = ::Logger::Formatter.new
end

My assets are loading fine via heroku though. (However, I dont plan on using heroku any more)

EDIT It looks like its an issue with rake assets:precompile providing the wrong file names. Ex: My compiled css file is: "public/assets/application-79dc234c01a4f604b52fc53ff49ac89d.css" but Im getting a 404 looking for "application.css". Renaming the file to "public/assets/application.css" will load it properly.

Any idea why this would be the case and how I can get it to precompile properly?

1条回答
看我几分像从前
2楼-- · 2019-07-06 03:44

This string after file name is called "digest", it's used to notify browser when file content changes. You need to use view helpers (asset_path, etc) to get name with digest, or you can turn off this feature with config.assets.digest = false

查看更多
登录 后发表回答