[英]Javascript assets not loading to deployed Heroku app(Production), but works fine locally
I have been fighting with this issue for the past two days now and have gotten nowhere, unfortunately. 过去两天来,我一直在与这个问题作斗争,但不幸的是,它没有任何进展。 I know this is a regularly asked question but none of the answers I have encountered have helped.
我知道这是一个经常被问到的问题,但是我所遇到的答案都没有帮助。
Below shows my assets in Chrome when the application is run locally. 下面显示了在本地运行该应用程序时我在Chrome中的资产。
Assets in Chrome(local) Chrome中的资产(本地)
Below are assets in Chrome Production 以下是Chrome制作中的资产
Assets in Chrome(production) Chrome中的资产(生产)
What I have tried 我尝试过的
I have tried doing config.assets.compile = true
我尝试做
config.assets.compile = true
I tried reorganizing my application.js
file 我尝试重组我的
application.js
文件
also RAILS_ENV=production bin/rails assets:precompile
and then deployed to production. 还
RAILS_ENV=production bin/rails assets:precompile
,然后部署到生产中。
I honestly wish I could remember all the steps i have tried but the ones above are the most reoccurring. 老实说,我希望我能记住我尝试过的所有步骤,但是以上步骤是最经常发生的。
Code 码
gemfile 的Gemfile
source 'https://rubygems.org'
git_source(:github) do |repo_name|
repo_name = "#{repo_name}/#{repo_name}" unless repo_name.include?("/")
"https://github.com/#{repo_name}.git"
end
# Bundle edge Rails instead: gem 'rails', github: 'rails/rails'
gem 'rails', '~> 5.0.6'
# Use postgresql as the database for Active Record
gem 'pg', '~> 0.18'
# Use Puma as the app server
gem 'puma', '~> 3.0'
# Use SCSS for stylesheets
gem 'sass-rails', '~> 5.0'
# Use Uglifier as compressor for JavaScript assets
gem 'uglifier', '>= 1.3.0'
# Use CoffeeScript for .coffee assets and views
gem 'coffee-rails', '~> 4.2'
# See https://github.com/rails/execjs#readme for more supported runtimes
# gem 'therubyracer', platforms: :ruby
# Use jquery as the JavaScript library
gem 'jquery-rails'
gem 'jquery-ui-rails'
# Build JSON APIs with ease. Read more: https://github.com/rails/jbuilder
gem 'jbuilder', '~> 2.5'
# Use Redis adapter to run Action Cable in production
# gem 'redis', '~> 3.0'
# Use ActiveModel has_secure_password
# gem 'bcrypt', '~> 3.1.7'
# Use Capistrano for deployment
# gem 'capistrano-rails', group: :development
gem 'rubocop', require: false
group :development, :test do
# Call 'byebug' anywhere in the code to stop execution and get a debugger console
gem 'byebug', platform: :mri
end
group :development do
# Access an IRB console on exception pages or by using <%= console %> anywhere in the code.
gem 'web-console', '>= 3.3.0'
gem 'listen', '~> 3.0.5'
# Spring speeds up development by keeping your application running in the background. Read more: https://github.com/rails/spring
gem 'spring'
gem 'spring-watcher-listen', '~> 2.0.0'
end
# Windows does not include zoneinfo files, so bundle the tzinfo-data gem
gem 'tzinfo-data', platforms: [:mingw, :mswin, :x64_mingw, :jruby]
group :development, :test do
gem 'rspec-rails', '~> 3.5'
gem "factory_bot_rails"
gem 'database_cleaner'
end
group :production do
gem 'mini_racer'
end
gem 'devise'
gem 'bootstrap', '4.0.0.alpha6'
gem "awesome_print", require:"ap"
gem 'simple_form'
gem 'jquery-ui-rails'
gem 'gon'
gem 'sprockets', '~>3.7.2'
gem 'rails-assets-tether', '>= 1.1.0'
application.js 的application.js
//
//= require jquery
//= require "tether"
//= require jquery-ui
//= require bootstrap
//= require_tree .
//= require bootstrap-sprockets
application.rb application.rb中
require_relative 'boot'
require 'rails/all'
# Require the gems listed in Gemfile, including any gems
# you've limited to :test, :development, or :production.
Bundler.require(*Rails.groups)
module Chessapp
class Application < Rails::Application
config.serve_static_assets = true
config.assets.compile = true
# Settings in config/environments/* take precedence over those specified here.
# Application configuration should go into files in config/initializers
# -- all .rb files in that directory are automatically loaded.
end
end
production.rb production.rb
Rails.application.configure do
#config.action_mailer.default_url_options = { host: 'chesschessrevolution.herokuapp.com' }
# Code is not reloaded between requests.
config.cache_classes = true
# Eager load code on boot. This eager loads most of Rails and
# your application in memory, allowing both threaded web servers
# and those relying on copy on write to perform better.
# Rake tasks automatically ignore this option for performance.
config.eager_load = true
# Full error reports are disabled and caching is turned on.
config.consider_all_requests_local = false
config.action_controller.perform_caching = true
config.serve_static_assets = true
# Disable serving static files from the `/public` folder by default since
# Apache or NGINX already handles this.
config.public_file_server.enabled = ENV['RAILS_SERVE_STATIC_FILES'].present?
# Compress JavaScripts and CSS.
config.assets.js_compressor = Uglifier.new(harmony: true)
# config.assets.css_compressor = :sass
# Do not fallback to assets pipeline if a precompiled asset is missed.
config.assets.compile = true
# `config.assets.precompile` and `config.assets.version` have moved to config/initializers/assets.rb
# Enable serving of images, stylesheets, and JavaScripts from an asset server.
# config.action_controller.asset_host = 'http://assets.example.com'
# 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
# Mount Action Cable outside main process or domain
# config.action_cable.mount_path = nil
# config.action_cable.url = 'wss://example.com/cable'
# config.action_cable.allowed_request_origins = [ 'http://example.com', /http:\/\/example.*/ ]
# Force all access to the app over SSL, use Strict-Transport-Security, and use secure cookies.
# config.force_ssl = true
# Use the lowest log level to ensure availability of diagnostic information
# when problems arise.
config.log_level = :debug
# Prepend all log lines with the following tags.
config.log_tags = [ :request_id ]
# Use a different cache store in production.
# config.cache_store = :mem_cache_store
# Use a real queuing backend for Active Job (and separate queues per environment)
# config.active_job.queue_adapter = :resque
# config.active_job.queue_name_prefix = "chessapp_#{Rails.env}"
config.action_mailer.perform_caching = false
# Ignore bad email addresses and do not raise email delivery errors.
# Set this to true and configure the email server for immediate delivery to raise delivery errors.
# config.action_mailer.raise_delivery_errors = false
# Enable locale fallbacks for I18n (makes lookups for any locale fall back to
# the I18n.default_locale when a translation cannot be found).
config.i18n.fallbacks = true
# Send deprecation notices to registered listeners.
config.active_support.deprecation = :notify
# Use default logging formatter so that PID and timestamp are not suppressed.
config.log_formatter = ::Logger::Formatter.new
# Use a different logger for distributed setups.
# require 'syslog/logger'
# config.logger = ActiveSupport::TaggedLogging.new(Syslog::Logger.new 'app-name')
config.public_file_server.enabled = ENV['RAILS_SERVE_STATIC_FILES'].present?
if ENV["RAILS_LOG_TO_STDOUT"].present?
logger = ActiveSupport::Logger.new(STDOUT)
logger.formatter = config.log_formatter
config.logger = ActiveSupport::TaggedLogging.new(logger)
end
# Do not dump schema after migrations.
config.active_record.dump_schema_after_migration = false
end
application.html.erb application.html.erb
<!DOCTYPE html>
<html>
<head>
<title>Chessapp</title>
<%= csrf_meta_tags %>
<%= stylesheet_link_tag 'application', media: 'all', 'data-turbolinks-track': 'reload' %>
<%= javascript_include_tag 'application', 'data-turbolinks-track': true %>
<link href="https://fonts.googleapis.com/css?family=Audiowide" rel="stylesheet">
</head>
<body>
<%= render 'shared/nav' %>
<div>
<% flash.each do |key, value| %>
<div class="alert alert-<%= key %>"><%= value %></div>
<% end %>
<class="notice"><%= notice %></p>
<class="alert"><%= alert %></p>
<%= yield %>
</div>
</body>
</html>
Any help on this would be greatly appreciated. 任何帮助,将不胜感激。 If the information I provided isn't sufficient please feel free to check out the repository @ github .
如果我提供的信息不够,请随时查看存储库@ github 。
Assets are loading, the reason why you are not able to see them individually(separate files) in production is because rails precompiles(minimizes) all the assets and puts into a single file. 资产正在加载中,之所以无法在生产中单独查看它们(单独的文件),是因为Rails会预编译(最小化)所有资产并将其放入单个文件中。
So if you have look at your application.css and application.js which is getting rendered in production you can see that it contains bootstrap, jquery, jquery-ui etc which you've required in application.js 因此,如果您查看在生产环境中呈现的application.css和application.js,您会发现它包含在application.js中需要的bootstrap,jquery,jquery-ui等
I had a look at your application.css and application.js and it contained all the assets you've required. 我查看了您的application.css和application.js ,其中包含您需要的所有资产。 They are not available anymore probably because you have done re-deployment.
它们不再可用,可能是因为您已经完成了重新部署。
You can learn more about asset pipeline here 您可以在此处了解有关资产管道的更多信息
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.