Rails 5: JS 文件未在生产环境中加载
Rails 5: JS files not loading in Production
我正在使用 Rails 5 和 Ruby 2.5,并部署到 Amazon Elastic Beanstalk。
所有样式表和 CSS 文件都在生产中正确加载,但是 Javascript 文件在生产中未正确加载。一切都在开发中完美运行。
我认为问题是在生产环境中,我只看到一个 .js 文件,其中挤满了很多 javascript 文件,导致无法正确加载。
这是它在本地主机上的样子:
这是它在生产服务器上的样子:
当我搜索生产 .js 文件时,我遗漏了很多在本地主机上加载的单独 JS 文件中的代码。
我已经尝试 运行 RAILS_ENV=production bundle exec rake assets:clean assets:precompile
并且我可以在 /public/assets 文件夹中看到我的所有资产。
我的 production.rb 文件:
Rails.application.configure do
config.cache_classes = true
config.eager_load = true
config.consider_all_requests_local = false
config.action_controller.perform_caching = true
config.read_encrypted_secrets = true
config.public_file_server.enabled = true
config.assets.js_compressor = :uglifier
config.assets.compile = false
config.log_level = :debug
config.log_tags = [ :request_id ]
config.action_mailer.perform_caching = false
config.i18n.fallbacks = true
config.active_support.deprecation = :notify
config.log_formatter = ::Logger::Formatter.new
if ENV["RAILS_LOG_TO_STDOUT"].present?
logger = ActiveSupport::Logger.new(STDOUT)
logger.formatter = config.log_formatter
config.logger = ActiveSupport::TaggedLogging.new(logger)
end
config.active_record.dump_schema_after_migration = false
config.action_mailer.perform_deliveries = true
config.action_mailer.raise_delivery_errors = true
config.assets.digest = true
Rails.application.config.assets.precompile += %w( *.js ^[^_]*.css *.css.erb )
end
我的 application.js 文件:
//= require jquery
//= require jquery_ujs
//= require turbolinks
//= require bootstrap
//= require editable/bootstrap-editable
//= require editable/bootstrap2-editable
//= require editable/rails
//= require_tree .
editable
gem 是 x-editable 并且用于就地编辑。
更新
这是在 application.html.erb 文件中加载样式表和 javascript 的方式:
<%= stylesheet_link_tag 'application', media: 'all', 'data-turbolinks-track': 'reload' %>
<%= javascript_include_tag 'application', 'data-turbolinks-track': 'reload' %>
尝试config.assets.compile
false
到true
然后会像下面这样
config.assets.compile = true
希望有用
我是通过手动下载Development中源代码中出现的每个JS文件,然后将它们上传到服务器,并在代码中手动将它们一个一个地导入来解决的,如locahost截图所示!
我正在使用 Rails 5 和 Ruby 2.5,并部署到 Amazon Elastic Beanstalk。
所有样式表和 CSS 文件都在生产中正确加载,但是 Javascript 文件在生产中未正确加载。一切都在开发中完美运行。
我认为问题是在生产环境中,我只看到一个 .js 文件,其中挤满了很多 javascript 文件,导致无法正确加载。
这是它在本地主机上的样子:
这是它在生产服务器上的样子:
当我搜索生产 .js 文件时,我遗漏了很多在本地主机上加载的单独 JS 文件中的代码。
我已经尝试 运行 RAILS_ENV=production bundle exec rake assets:clean assets:precompile
并且我可以在 /public/assets 文件夹中看到我的所有资产。
我的 production.rb 文件:
Rails.application.configure do
config.cache_classes = true
config.eager_load = true
config.consider_all_requests_local = false
config.action_controller.perform_caching = true
config.read_encrypted_secrets = true
config.public_file_server.enabled = true
config.assets.js_compressor = :uglifier
config.assets.compile = false
config.log_level = :debug
config.log_tags = [ :request_id ]
config.action_mailer.perform_caching = false
config.i18n.fallbacks = true
config.active_support.deprecation = :notify
config.log_formatter = ::Logger::Formatter.new
if ENV["RAILS_LOG_TO_STDOUT"].present?
logger = ActiveSupport::Logger.new(STDOUT)
logger.formatter = config.log_formatter
config.logger = ActiveSupport::TaggedLogging.new(logger)
end
config.active_record.dump_schema_after_migration = false
config.action_mailer.perform_deliveries = true
config.action_mailer.raise_delivery_errors = true
config.assets.digest = true
Rails.application.config.assets.precompile += %w( *.js ^[^_]*.css *.css.erb )
end
我的 application.js 文件:
//= require jquery
//= require jquery_ujs
//= require turbolinks
//= require bootstrap
//= require editable/bootstrap-editable
//= require editable/bootstrap2-editable
//= require editable/rails
//= require_tree .
editable
gem 是 x-editable 并且用于就地编辑。
更新
这是在 application.html.erb 文件中加载样式表和 javascript 的方式:
<%= stylesheet_link_tag 'application', media: 'all', 'data-turbolinks-track': 'reload' %>
<%= javascript_include_tag 'application', 'data-turbolinks-track': 'reload' %>
尝试config.assets.compile
false
到true
然后会像下面这样
config.assets.compile = true
希望有用
我是通过手动下载Development中源代码中出现的每个JS文件,然后将它们上传到服务器,并在代码中手动将它们一个一个地导入来解决的,如locahost截图所示!