Heroku Rails JS管道问题

Posted

技术标签:

【中文标题】Heroku Rails JS管道问题【英文标题】:Heroku Rails JS pipeline issue 【发布时间】:2018-10-07 16:17:52 【问题描述】:

我已经解决这个问题一段时间了,我被卡住了。

我有一个使用 Bootstrap 4 的 rails 4.1.0 应用程序。一切都在本地运行,但是当我推送到我的生产 heroku 服务器时,js 已编译,但页面上的所有 js 都已损坏。

服务器日志中没有错误,但是控制台中有错误:

Uncaught ReferenceError: Popper 未定义 在应用程序-21bd05413e87683d1fbc6420906ba3317d416c1d0b78d17c25e793b78e405352.js:5 (index):85 Uncaught TypeError: $(...).datetimepicker is not a function 在 html 文档。 ((指数):85) 在 l (application-21bd05413e87683d1fbc6420906ba3317d416c1d0b78d17c25e793b78e405352.js:2) 在 Object.fireWith [as resolveWith] (application-21bd05413e87683d1fbc6420906ba3317d416c1d0b78d17c25e793b78e405352.js:2) 在 Function.ready (application-21bd05413e87683d1fbc6420906ba3317d416c1d0b78d17c25e793b78e405352.js:2) 在 HTMLDocument.a (application-21bd05413e87683d1fbc6420906ba3317d416c1d0b78d17c25e793b78e405352.js:1)

已安装的宝石:

gem 'rails', '4.2.6'
gem 'sqlite3', group: :development
gem 'sass-rails', '~> 5.0'
gem 'uglifier', '>= 1.3.0'
gem 'coffee-rails', '~> 4.1.0'
gem 'jquery-rails'
gem 'turbolinks'
gem 'jbuilder', '~> 2.0'
gem 'sdoc', '~> 0.4.0', group: :doc
gem 'puma'
gem 'devise'
gem 'omniauth'
gem 'omniauth-facebook', '~> 4.0.0'
gem 'pg', '~> 0.18.4'
gem 'bootstrap', '~> 4.1.0'
gem 'sprockets-rails', :require => 'sprockets/railtie'
gem 'bootstrap-glyphicons'
gem 'bootstrap-select-rails'
gem 'momentjs-rails', '>= 2.9.0' 
gem 'bootstrap4-datetime-picker-rails'
gem 'client_side_validations'
gem 'validates_timeliness', '~> 4.0' 
source 'https://rails-assets.org' do

  gem 'rails-assets-tether', '>= 1.3.3'

end
group :development, :test do

  gem 'byebug'

end
group :development do

  gem 'web-console', '~> 2.0'
  gem 'spring'
end

application.js:

//=require tether
//=require popper
//=require turbolinks
//=require jquery3
//=require jquery_ujs
//=require bootstrap-sprockets
//=require_tree
//=require moment
//=require tempusdominus-bootstrap-4.js
//=require bootstrap-select
//=require rails.validations
//=require bootstrap/alert
//=require bootstrap/dropdown

大多数有类似问题的人都可以通过更改 application.js 文件中库的顺序来解决它们,但我几乎尝试了所有在 jquery、bootstrap、popper 中移动的组合,但没有任何成功。

我不确定还可以尝试什么。

【问题讨论】:

尝试将require_tree 移动到底部。您想在库加载之后加载您的自定义 JS。 将 require_tree 移到底部没有效果。 你确定吗?我认为这至少可以消除 Uncaught ReferenceError: Popper is not defined 错误,让我们少解决一个问题。 是的,我只是仔细检查了提交并重新部署。仍然得到相同的 2 个控制台错误 :( 【参考方案1】:

我会从 heroku 查看您的部署日志,并确保您的资产正在预编译。此外,您应该使用像 s3 这样的 CDN 来提供这些资产,而不是直接从 Heroku 提供。 例如,我上次部署的示例: Preparing app for Rails asset pipeline Running: rake assets:precompile yarn install v1.6.0 [1/5] Validating package.json... [2/5] Resolving packages... [3/5] Fetching packages... info fsevents@1.1.3: The platform "linux" is incompatible with this module. info "fsevents@1.1.3" is an optional dependency and failed compatibility check. Excluding it from installation. [4/5] Linking dependencies... warning "@rails/webpacker > postcss-cssnext@3.1.0" has unmet peer dependency "caniuse-lite@^1.0.30000697". [5/5] Building fresh packages... Done in 19.81s. Webpacker is installed ? ? Using /tmp/build_c920754b3e4f6f8ef59d547c2751d714/config/webpacker.yml file for setting up webpack paths Compiling… Compiled all packs in /tmp/build_c920754b3e4f6f8ef59d547c2751d714/public/packs Asset precompilation completed (27.00s) Cleaning assets Running: rake assets:clean

您还应该能够使用 Web 浏览器检查器来查看它认为 JS 文件应该位于的位置。

【讨论】:

以上是关于Heroku Rails JS管道问题的主要内容,如果未能解决你的问题,请参考以下文章

Rails:application.css 不在资产管道中

如何让 Rails 资产管道生成源地图?

Rails 3:资产管道+许多布局

从 Rails 资产管道中清除缓存

Rails 6 的资产管道中不存在资产“application.js”

用于 JavaScript 的 Rails 3.1 资产管道