【问题标题】:Javascript is not working on Heroku but works locally, how do I solve this?Javascript 不能在 Heroku 上运行,但可以在本地运行,我该如何解决这个问题?
【发布时间】:2019-04-27 16:44:25
【问题描述】:

我能够推送我的代码并部署到 Heroku,之前它在 Cloud9 上本地运行。我连接了 ruby​​ on rails 的 buildpacks 并添加了一个 postgres db 以避免部署错误。当我查看部署的代码时,我的页面的 javascript 被禁用。

我已尝试摆脱 application.rb 文件中所需的 //= 树,删除 gemlock 文件,安装 sass 替代品,因为当前的替代品已折旧,heroku 资产清理并重新启动。并运行 rake assets:precompile for both local 和 heroku

这是在heroku run rake assets:precompile之后

NoMethodError: undefined method `[]' for nil:NilClass
/app/vendor/bundle/ruby/2.5.0/gems/sprockets-3.7.2/lib/sprockets/sass_processor.rb:278:in `sprockets_context'
/app/vendor/bundle/ruby/2.5.0/gems/sprockets-3.7.2/lib/sprockets/sass_processor.rb:124:in `asset_path'
/app/vendor/bundle/ruby/2.5.0/gems/sprockets-3.7.2/lib/sprockets/sass_processor.rb:137:in `asset_url'
/app/vendor/bundle/ruby/2.5.0/gems/sprockets-3.7.2/lib/sprockets/sass_processor.rb:209:in `font_url'
/app/vendor/bundle/ruby/2.5.0/gems/sass-3.7.4/lib/sass/script/tree/funcall.rb:151:in `block in _perform'
/app/vendor/bundle/ruby/2.5.0/gems/sass-3.7.4/lib/sass/stack.rb:108:in `block in with_function'
/app/vendor/bundle/ruby/2.5.0/gems/sass-3.7.4/lib/sass/stack.rb:135:in `with_frame'
/app/vendor/bundle/ruby/2.5.0/gems/sass-3.7.4/lib/sass/stack.rb:108:in `with_function'
/app/vendor/bundle/ruby/2.5.0/gems/sass-3.7.4/lib/sass/script/tree/funcall.rb:149:in `_perform'
/app/vendor/bundle/ruby/2.5.0/gems/sass-3.7.4/lib/sass/script/tree/node.rb:50:in `perform'
/app/vendor/bundle/ruby/2.5.0/gems/sass-3.7.4/lib/sass/script/tree/list_literal.rb:75:in `block in _perform'
/app/vendor/bundle/ruby/2.5.0/gems/sass-3.7.4/lib/sass/script/tree/list_literal.rb:75:in `map'
/app/vendor/bundle/ruby/2.5.0/gems/sass-3.7.4/lib/sass/script/tree/list_literal.rb:75:in `_perform'
/app/vendor/bundle/ruby/2.5.0/gems/sass-3.7.4/lib/sass/script/tree/node.rb:50:in `perform'
/app/vendor/bundle/ruby/2.5.0/gems/sass-3.7.4/lib/sass/tree/visitors/perform.rb:398:in `visit_prop'
/app/vendor/bundle/ruby/2.5.0/gems/sass-3.7.4/lib/sass/tree/visitors/base.rb:36:in `visit'
/app/vendor/bundle/ruby/2.5.0/gems/sass-3.7.4/lib/sass/tree/visitors/perform.rb:158:in `block in visit'
/app/vendor/bundle/ruby/2.5.0/gems/sass-3.7.4/lib/sass/stack.rb:79:in `block in with_base'
/app/vendor/bundle/ruby/2.5.0/gems/sass-3.7.4/lib/sass/stack.rb:135:in `with_frame'
/app/vendor/bundle/ruby/2.5.0/gems/sass-3.7.4/lib/sass/stack.rb:79:in `with_base'
/app/vendor/bundle/ruby/2.5.0/gems/sass-3.7.4/lib/sass/tree/visitors/perform.rb:158:in `visit'
/app/vendor/bundle/ruby/2.5.0/gems/sass-3.7.4/lib/sass/tree/visitors/perform.rb:513:in `block (2 levels) in visit_directive'
/app/vendor/bundle/ruby/2.5.0/gems/sass-3.7.4/lib/sass/tree/visitors/perform.rb:513:in `map'
/app/vendor/bundle/ruby/2.5.0/gems/sass-3.7.4/lib/sass/tree/visitors/perform.rb:513:in `block in visit_directive'
/app/vendor/bundle/ruby/2.5.0/gems/sass-3.7.4/lib/sass/tree/visitors/perform.rb:179:in `with_environment'
/app/vendor/bundle/ruby/2.5.0/gems/sass-3.7.4/lib/sass/tree/visitors/perform.rb:512:in `visit_directive'
/app/vendor/bundle/ruby/2.5.0/gems/sass-3.7.4/lib/sass/tree/visitors/base.rb:36:in `visit'
/app/vendor/bundle/ruby/2.5.0/gems/sass-3.7.4/lib/sass/tree/visitors/perform.rb:158:in `block in visit'
/app/vendor/bundle/ruby/2.5.0/gems/sass-3.7.4/lib/sass/stack.rb:79:in `block in with_base'
/app/vendor/bundle/ruby/2.5.0/gems/sass-3.7.4/lib/sass/stack.rb:135:in `with_frame'
/app/vendor/bundle/ruby/2.5.0/gems/sass-3.7.4/lib/sass/stack.rb:79:in `with_base'
/app/vendor/bundle/ruby/2.5.0/gems/sass-3.7.4/lib/sass/tree/visitors/perform.rb:158:in `visit'
/app/vendor/bundle/ruby/2.5.0/gems/sass-3.7.4/lib/sass/tree/visitors/base.rb:52:in `block in visit_children'
/app/vendor/bundle/ruby/2.5.0/gems/sass-3.7.4/lib/sass/tree/visitors/base.rb:52:in `map'
/app/vendor/bundle/ruby/2.5.0/gems/sass-3.7.4/lib/sass/tree/visitors/base.rb:52:in `visit_children'
/app/vendor/bundle/ruby/2.5.0/gems/sass-3.7.4/lib/sass/tree/visitors/perform.rb:167:in `block in visit_children'
/app/vendor/bundle/ruby/2.5.0/gems/sass-3.7.4/lib/sass/tree/visitors/perform.rb:179:in `with_environment'
/app/vendor/bundle/ruby/2.5.0/gems/sass-3.7.4/lib/sass/tree/visitors/perform.rb:166:in `visit_children'
/app/vendor/bundle/ruby/2.5.0/gems/sass-3.7.4/lib/sass/tree/visitors/base.rb:36:in `block in visit'
/app/vendor/bundle/ruby/2.5.0/gems/sass-3.7.4/lib/sass/tree/visitors/perform.rb:186:in `visit_root'
/app/vendor/bundle/ruby/2.5.0/gems/sass-3.7.4/lib/sass/tree/visitors/base.rb:36:in `visit'
/app/vendor/bundle/ruby/2.5.0/gems/sass-3.7.4/lib/sass/tree/visitors/perform.rb:157:in `visit'
/app/vendor/bundle/ruby/2.5.0/gems/sass-3.7.4/lib/sass/tree/visitors/perform.rb:10:in `visit'
/app/vendor/bundle/ruby/2.5.0/gems/sass-3.7.4/lib/sass/tree/root_node.rb:36:in `css_tree'
/app/vendor/bundle/ruby/2.5.0/gems/sass-3.7.4/lib/sass/tree/root_node.rb:20:in `render'
/app/vendor/bundle/ruby/2.5.0/gems/sass-3.7.4/lib/sass/engine.rb:290:in `render'
/app/vendor/bundle/ruby/2.5.0/gems/sprockets-3.7.2/lib/sprockets/sass_compressor.rb:48:in `call'
/app/vendor/bundle/ruby/2.5.0/gems/sprockets-3.7.2/lib/sprockets/sass_compressor.rb:28:in `call'
/app/vendor/bundle/ruby/2.5.0/gems/sprockets-3.7.2/lib/sprockets/processor_utils.rb:75:in `call_processor'
/app/vendor/bundle/ruby/2.5.0/gems/sprockets-3.7.2/lib/sprockets/processor_utils.rb:57:in `block in call_processors'
/app/vendor/bundle/ruby/2.5.0/gems/sprockets-3.7.2/lib/sprockets/processor_utils.rb:56:in `reverse_each'
/app/vendor/bundle/ruby/2.5.0/gems/sprockets-3.7.2/lib/sprockets/processor_utils.rb:56:in `call_processors'
/app/vendor/bundle/ruby/2.5.0/gems/sprockets-3.7.2/lib/sprockets/loader.rb:134:in `load_from_unloaded'
/app/vendor/bundle/ruby/2.5.0/gems/sprockets-3.7.2/lib/sprockets/loader.rb:60:in `block in load'
/app/vendor/bundle/ruby/2.5.0/gems/sprockets-3.7.2/lib/sprockets/loader.rb:317:in `fetch_asset_from_dependency_cache'
/app/vendor/bundle/ruby/2.5.0/gems/sprockets-3.7.2/lib/sprockets/loader.rb:44:in `load'
/app/vendor/bundle/ruby/2.5.0/gems/sprockets-3.7.2/lib/sprockets/cached_environment.rb:20:in `block in initialize'
/app/vendor/bundle/ruby/2.5.0/gems/sprockets-3.7.2/lib/sprockets/cached_environment.rb:47:in `load'
/app/vendor/bundle/ruby/2.5.0/gems/sprockets-3.7.2/lib/sprockets/base.rb:66:in `find_asset'
/app/vendor/bundle/ruby/2.5.0/gems/sprockets-3.7.2/lib/sprockets/base.rb:73:in `find_all_linked_assets'
/app/vendor/bundle/ruby/2.5.0/gems/sprockets-3.7.2/lib/sprockets/manifest.rb:134:in `block in find'
/app/vendor/bundle/ruby/2.5.0/gems/sprockets-3.7.2/lib/sprockets/manifest.rb:133:in `each'
/app/vendor/bundle/ruby/2.5.0/gems/sprockets-3.7.2/lib/sprockets/manifest.rb:133:in `find'
/app/vendor/bundle/ruby/2.5.0/gems/sprockets-3.7.2/lib/sprockets/manifest.rb:186:in `compile'
/app/vendor/bundle/ruby/2.5.0/gems/sprockets-rails-3.2.1/lib/sprockets/rails/task.rb:68:in `block (3 levels) in define'
/app/vendor/bundle/ruby/2.5.0/gems/sprockets-3.7.2/lib/rake/sprocketstask.rb:147:in `with_logger'
/app/vendor/bundle/ruby/2.5.0/gems/sprockets-rails-3.2.1/lib/sprockets/rails/task.rb:67:in `block (2 levels) in define'
/app/vendor/bundle/ruby/2.5.0/gems/rake-12.3.2/exe/rake:27:in `<top (required)>'
/app/vendor/bundle/ruby/2.5.0/gems/bundler-1.15.2/lib/bundler/cli/exec.rb:74:in `load'
/app/vendor/bundle/ruby/2.5.0/gems/bundler-1.15.2/lib/bundler/cli/exec.rb:74:in `kernel_load'
/app/vendor/bundle/ruby/2.5.0/gems/bundler-1.15.2/lib/bundler/cli/exec.rb:27:in `run'
/app/vendor/bundle/ruby/2.5.0/gems/bundler-1.15.2/lib/bundler/cli.rb:360:in `exec'
/app/vendor/bundle/ruby/2.5.0/gems/bundler-1.15.2/lib/bundler/vendor/thor/lib/thor/command.rb:27:in `run'
/app/vendor/bundle/ruby/2.5.0/gems/bundler-1.15.2/lib/bundler/vendor/thor/lib/thor/invocation.rb:126:in `invoke_command'
/app/vendor/bundle/ruby/2.5.0/gems/bundler-1.15.2/lib/bundler/vendor/thor/lib/thor.rb:369:in `dispatch'
/app/vendor/bundle/ruby/2.5.0/gems/bundler-1.15.2/lib/bundler/cli.rb:20:in `dispatch'
/app/vendor/bundle/ruby/2.5.0/gems/bundler-1.15.2/lib/bundler/vendor/thor/lib/thor/base.rb:444:in `start'
/app/vendor/bundle/ruby/2.5.0/gems/bundler-1.15.2/lib/bundler/cli.rb:10:in `start'
/app/vendor/bundle/ruby/2.5.0/gems/bundler-1.15.2/exe/bundle:30:in `block in <top (required)>'
/app/vendor/bundle/ruby/2.5.0/gems/bundler-1.15.2/lib/bundler/friendly_errors.rb:121:in `with_friendly_errors'
/app/vendor/bundle/ruby/2.5.0/gems/bundler-1.15.2/exe/bundle:22:in `<top (required)>'
/app/bin/bundle:3:in `load'
/app/bin/bundle:3:in `<main>'
Tasks: TOP => assets:precompile

我希望拥有一个功能齐全的网站,但推送到 heroku 似乎导致应用程序没有任何 JavaScript 功能,但它应该有。请帮忙,对于烦人的帖子,我很抱歉,但我真的很想把它写下来。

【问题讨论】:

标签: javascript ruby-on-rails heroku


【解决方案1】:

如果您使用的是 rails-bootstrap gem,则有一个名为 bootstrap.coffee.js 的文件。您可以尝试删除它,看看它是否有效。

另外,你也可以尝试以这种方式推送(在推送到heroku之前预编译):

rake assets:precompile RAILS_ENV=production
git add .
git commit -a -m "JS"
git push heroku master

除此之外,如果它们都不起作用,来自 config/environments/production.rb:

config.assets.compile = true 

不建议使用最后一种方法。

【讨论】:

  • 我尝试了 ``` rake assets:precompile RAILS_ENV=production`` 和 $RAILS_ENV=production rake assets:precompile --trace 都已编译更正并亮了绿灯,但 javascript 仍然无法正常工作。我还将所有 .css 重命名为 .scss 文件。我在production.rb中尝试了config.assets.compile=true,它仍然没有做任何事情。任何其他可能是错误的线索?看什么会有帮助?
  • 我尝试使用 CDN 线路访问 Jquery,但它仅适用于我的引导轮播,是否与资产管道有关?
【解决方案2】:

我发现我的assets.rbapplication.js 文件中缺少正确的文件。之后,我如上所述进行了预编译和推送,并且成功了!谢谢大家的帮助!

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2018-02-05
    • 1970-01-01
    • 2021-09-18
    • 1970-01-01
    • 2018-06-10
    • 1970-01-01
    • 1970-01-01
    • 2021-11-23
    相关资源
    最近更新 更多