middleman / middleman-sprockets

Sprockets support for Middleman

Home Page:http://middlemanapp.com

Geek Repo:Geek Repo

Github PK Tool:Github PK Tool

middleman-sprockets fails to start throwing an error

alem0lars opened this issue · comments

Expected behavior and actual behavior

middleman-sprockets fails to start throwing the following error:

/data/projects/work/cel/cel-web-frontend/vendor/bundle/ruby/2.5.0/gems/middleman-core-4.1.10/lib/middleman-core/sitemap/resource.rb:88: warning: constant ::Fixnum is deprecated
NoMethodError: undefined method `include' for #<Middleman::Application:0x47451094074920>
  /data/projects/work/cel/cel-web-frontend/vendor/bundle/ruby/2.5.0/bundler/gems/middleman-sprockets-55fe2ee8a260/lib/middleman-sprockets/extension.rb:51:in `initialize'
  /data/projects/work/cel/cel-web-frontend/vendor/bundle/ruby/2.5.0/gems/middleman-core-4.1.10/lib/middleman-core/extension_manager.rb:66:in `new'
  /data/projects/work/cel/cel-web-frontend/vendor/bundle/ruby/2.5.0/gems/middleman-core-4.1.10/lib/middleman-core/extension_manager.rb:66:in `activate'
  /data/projects/work/cel/cel-web-frontend/vendor/bundle/ruby/2.5.0/gems/middleman-core-4.1.10/lib/middleman-core/extensions.rb:120:in `block in auto_activate'
  /usr/lib/ruby/2.5.0/set.rb:338:in `each_key'
  /usr/lib/ruby/2.5.0/set.rb:338:in `each'
  /data/projects/work/cel/cel-web-frontend/vendor/bundle/ruby/2.5.0/gems/middleman-core-4.1.10/lib/middleman-core/extensions.rb:117:in `auto_activate'
  /data/projects/work/cel/cel-web-frontend/vendor/bundle/ruby/2.5.0/gems/middleman-core-4.1.10/lib/middleman-core/extension_manager.rb:28:in `auto_activate'
  /data/projects/work/cel/cel-web-frontend/vendor/bundle/ruby/2.5.0/gems/middleman-core-4.1.10/lib/middleman-core/extension_manager.rb:20:in `block (2 levels) in initialize'
  /data/projects/work/cel/cel-web-frontend/vendor/bundle/ruby/2.5.0/gems/middleman-core-4.1.10/lib/middleman-core/callback_manager.rb:57:in `instance_exec'
  /data/projects/work/cel/cel-web-frontend/vendor/bundle/ruby/2.5.0/gems/middleman-core-4.1.10/lib/middleman-core/callback_manager.rb:57:in `block in execute'
  /data/projects/work/cel/cel-web-frontend/vendor/bundle/ruby/2.5.0/gems/hamster-3.0.0/lib/hamster/vector.rb:1316:in `each'
  /data/projects/work/cel/cel-web-frontend/vendor/bundle/ruby/2.5.0/gems/hamster-3.0.0/lib/hamster/vector.rb:1316:in `traverse_depth_first'
  /data/projects/work/cel/cel-web-frontend/vendor/bundle/ruby/2.5.0/gems/hamster-3.0.0/lib/hamster/vector.rb:431:in `each'
  /data/projects/work/cel/cel-web-frontend/vendor/bundle/ruby/2.5.0/gems/middleman-core-4.1.10/lib/middleman-core/callback_manager.rb:57:in `execute'
  /data/projects/work/cel/cel-web-frontend/vendor/bundle/ruby/2.5.0/gems/contracts-0.13.0/lib/contracts/method_reference.rb:43:in `send_to'
  /data/projects/work/cel/cel-web-frontend/vendor/bundle/ruby/2.5.0/gems/contracts-0.13.0/lib/contracts/call_with.rb:76:in `call_with'
  /data/projects/work/cel/cel-web-frontend/vendor/bundle/ruby/2.5.0/gems/contracts-0.13.0/lib/contracts/method_handler.rb:138:in `block in redefine_method'
  /data/projects/work/cel/cel-web-frontend/vendor/bundle/ruby/2.5.0/gems/middleman-core-4.1.10/lib/middleman-core/callback_manager.rb:28:in `block in install_methods!'
  /data/projects/work/cel/cel-web-frontend/vendor/bundle/ruby/2.5.0/gems/middleman-core-4.1.10/lib/middleman-core/application.rb:279:in `initialize'
  /data/projects/work/cel/cel-web-frontend/vendor/bundle/ruby/2.5.0/gems/middleman-cli-4.1.10/bin/middleman:51:in `new'
  /data/projects/work/cel/cel-web-frontend/vendor/bundle/ruby/2.5.0/gems/middleman-cli-4.1.10/bin/middleman:51:in `<top (required)>'
  /data/projects/work/cel/cel-web-frontend/vendor/bundle/ruby/2.5.0/bin/middleman:23:in `load'
  /data/projects/work/cel/cel-web-frontend/vendor/bundle/ruby/2.5.0/bin/middleman:23:in `<top (required)>'

Steps to reproduce the problem (from a clean middleman installation) or example repo

Gemfile:

gem "middleman"
gem "middleman-sprockets",
    git: "https://github.com/middleman/middleman-sprockets",
    branch: "v3-stable-real"

Additional information

  • Ruby version: 2.5.0
  • Middleman version: 4.1.10
  • Middleman Sprockets version: branch v3-stable-real
  • OS version: Linux

It looks like at some point during the middleman 4.0 development, the method middleman-sprockets is using as a v4 check changed names via changelog:

rename app.add_to_config_context to Extension.expose_to_config for adding extension-local methods to the sandboxed scope of config.rb

https://github.com/middleman/middleman-sprockets/blob/v3-stable-real/lib/middleman-sprockets/extension.rb#L48

If you're game to switch that out & test it'd be super helpful.

Also, since you are running middleman 4, I'd suggest updating to using middleman-sprockets 4+ since it has been developed much more recently with middleman 4 compat in mind.

IIRC adding paths to sprockets changed a little bit, the upgrade guide may help. If you can share your config.rb and some of your asset paths I'm happy to help as well :)

@stevenosloan Thanks for the response :) Here are the information requested:

These are the versions of middleman and middleman-sprockets:

gem "middleman", "4.2.1"
gem "middleman-sprockets", "4.1.1"

This is the relevant part of config.rb:

activate :sprockets do |c|
  # Expose middleman helpers to rendering context
  c.expose_middleman_helpers = true
end
# Add components installed with Bower to the Sprockets path
bower_config = JSON.parse(IO.read("#{root}/.bowerrc"))
sprockets.append_path(File.join(root, bower_config["directory"]))
# Add vendored components to the Sprockets path
sprockets.append_path(File.join(root, config.source, "vendor"))

Where .bowerrc is:

{
  "directory" : "vendor"
}

In fact, I've installed PreloadJS at vendor directory:

$ ls vendor/PreloadJS/lib
preloadjs-NEXT.js  preloadjs-NEXT.min.js  preloadjs.js  preloadjs.min.js

However in a source CoffeeScript file I've defined a require statement of preloadjs-NEXT.combined:

#= require "PreloadJS/lib/preloadjs-NEXT.combined"

That gives error:

Error: Sprockets::FileNotFound: couldn't find file 'PreloadJS/lib/preloadjs-NEXT.combined' with type 'application/javascript'
Checked in these paths: 
  /data/projects/work/cel/cel-web-frontend/vendor
  /data/projects/work/cel/cel-web-frontend/source/vendor
  /data/projects/work/cel/cel-web-frontend/source/assets/js
  /data/projects/work/cel/cel-web-frontend/source/assets/css
  /data/projects/work/cel/cel-web-frontend/source
  on line 4 of /data/projects/work/cel/cel-web-frontend/source/assets/js/for_components/preload_manager.js.coffee)

I would be really glad to you if you can help me..

Thanks

One thing I see is that there doesn't appear to be a preloadjs-NEXT.combined.js file in your vendor/PreloadJS/lib directory. Looks like they changed that once they released 1.0.1, I think if you change your require statement to

#= require "PreloadJS/lib/preloadjs-NEXT"

that'll be what you want.