rubyonjets / jets

Ruby on Jets
http://rubyonjets.com
MIT License
2.6k stars 181 forks source link

Webpacker can't find application.js in public/packs/manifest.json #105

Closed zeetao closed 5 years ago

zeetao commented 5 years ago

Am just doing a first test for rubyonjets and wanted to try porting over a static website from rubyonrails over and see how easy that would be. So I just

  1. started a new rubyonjets project,
  2. copied over the views into the app/views directory
  3. copied all the assets into app/javascript/packs directory
  4. copied all images into app/javascript/images directory
  5. changed the routes
  6. changed to link_to helpers (the rails helpers weren't working)
  7. started jets server locally
  8. accessed one of the static pages on my browser

Then I just tried testing out the static page and I keep getting this error below: ActionView::Template::Error: Webpacker can't find application.js in public/packs/manifest.json. Possible causes:

  1. You want to set webpacker.yml value of compile to true for your environment unless you are using the webpack -w or the webpack-dev-server.
  2. webpack has not yet re-run to reflect updates.
  3. You have misconfigured Webpacker's config/webpacker.yml file.
  4. Your webpack configuration is not creating a manifest.

Am using ruby 2.5.1, jets 1.3.6

tongueroo commented 5 years ago

Unsure if you've seen Mega Mode and Rails Support. Here's a blog post also: Jets Mega Mode: Run Rails on AWS Lambda

Think that's a quicker and easier way to get a Rails project running on AWS Lambda via Jets TBH. Essentially, Mega Mode imports a Rails or Rack project into the rack folder and it runs as originally intended. So as long as your app starts up with cd rack && bundle exec rackup you're good. Jets then proxies to the rack app via config/routes.rb. It's covered in the links above.

If you rather port over completely to Jets that's fine too, it'll just take more work. Jets overrides a lot of what Rails does for API gateway, etc.

RE: ActionView::Template::Error

Wondering if you can provide the app code and stack trace. Or an example with a subset of that reproducing it on GitHub. Need a little more context to debug this one further. 🧐

zeetao commented 5 years ago

I have seen the mega mode. But I want to see how I can serve my site using rubyonjets alone as in using lambda, api gateway and s3 assets. This is a bit of a learning process for me so I want to see how it gets done.

if you can point out what stupid mistake I made or lacked understanding, I would appreciate it. I suspect I have missed understanding of something crucial.

I have added you to the repo https://github.com/zeetao/awanmulan_jets so you can take a look at the code and Stack trace below:

[2018-12-19 23:41:37] INFO  WEBrick 1.4.2
[2018-12-19 23:41:37] INFO  ruby 2.5.1 (2018-03-29) [x86_64-darwin14]
[2018-12-19 23:41:37] INFO  WEBrick::HTTPServer#start: pid=97066 port=8888
I, [2018-12-19T23:41:54.177283 #97068]  INFO -- : Started GET "/" for 127.0.0.1 at 2018-12-19 23:41:54 +0800
I, [2018-12-19T23:41:54.177434 #97068]  INFO -- : Processing PagesController#home
I, [2018-12-19T23:41:54.177617 #97068]  INFO -- :   Event: {"resource":"/","path":"/","httpMethod":"GET","headers":{"Host":"localhost:8888","Connection":"keep-alive","User-Agent":"Mozilla/5.0 (Macintosh; Intel Mac OS X 10_10_3) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/70.0.3538.110 Safari/537.36","Accept":"text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,image/apng,*/*;q=0.8","Accept-Encoding":"gzip, deflate, br","Accept-Language":"en-GB,en-US;q=0.9,en;q=0.8","Version":"HTTP/1.1","cache-control":"max-age=0","upgrade-insecure-requests":"1"},"queryStringParameters":{},"pathParameters":null,"stageVariables":null,"requestContext":{},"body":null,"isBase64Encoded":false}
I, [2018-12-19T23:41:54.177746 #97068]  INFO -- :   Parameters: {}
[Webpacker] Compiling…
[Webpacker] Compilation failed:
bundler: failed to load command: webpack (/Users/zee/.rbenv/versions/2.5.1/lib/ruby/gems/2.5.0/bin/webpack)

Errno::ENOENT: No such file or directory - /Users/zee/WorkSpace/awanmulan/rubyjets/awanmulan_jets/node_modules/.bin/webpack
  /Users/zee/.rbenv/versions/2.5.1/lib/ruby/gems/2.5.0/bundler/gems/webpacker-a8c46614c675/lib/webpacker/webpack_runner.rb:11:in `exec'
  /Users/zee/.rbenv/versions/2.5.1/lib/ruby/gems/2.5.0/bundler/gems/webpacker-a8c46614c675/lib/webpacker/webpack_runner.rb:11:in `block in run'
  /Users/zee/.rbenv/versions/2.5.1/lib/ruby/gems/2.5.0/bundler/gems/webpacker-a8c46614c675/lib/webpacker/webpack_runner.rb:10:in `chdir'
  /Users/zee/.rbenv/versions/2.5.1/lib/ruby/gems/2.5.0/bundler/gems/webpacker-a8c46614c675/lib/webpacker/webpack_runner.rb:10:in `run'
  /Users/zee/.rbenv/versions/2.5.1/lib/ruby/gems/2.5.0/bundler/gems/webpacker-a8c46614c675/lib/webpacker/runner.rb:6:in `run'
  /Users/zee/.rbenv/versions/2.5.1/lib/ruby/gems/2.5.0/bundler/gems/webpacker-a8c46614c675/exe/webpack:8:in `<top (required)>'
  /Users/zee/.rbenv/versions/2.5.1/lib/ruby/gems/2.5.0/bin/webpack:23:in `load'
  /Users/zee/.rbenv/versions/2.5.1/lib/ruby/gems/2.5.0/bin/webpack:23:in `<top (required)>'

ActionView::Template::Error: Webpacker can't find application.js in public/packs/manifest.json. Possible causes:
1. You want to set webpacker.yml value of compile to true for your environment
   unless you are using the `webpack -w` or the webpack-dev-server.
2. webpack has not yet re-run to reflect updates.
3. You have misconfigured Webpacker's config/webpacker.yml file.
4. Your webpack configuration is not creating a manifest.
Your manifest contains:
{
}

    /Users/zee/.rbenv/versions/2.5.1/lib/ruby/gems/2.5.0/bundler/gems/webpacker-a8c46614c675/lib/webpacker/manifest.rb:44:in `handle_missing_entry'
    /Users/zee/.rbenv/versions/2.5.1/lib/ruby/gems/2.5.0/bundler/gems/webpacker-a8c46614c675/lib/webpacker/manifest.rb:27:in `lookup!'
    /Users/zee/.rbenv/versions/2.5.1/lib/ruby/gems/2.5.0/bundler/gems/webpacker-a8c46614c675/lib/webpacker/helper.rb:60:in `block in sources_from_pack_manifest'
    /Users/zee/.rbenv/versions/2.5.1/lib/ruby/gems/2.5.0/bundler/gems/webpacker-a8c46614c675/lib/webpacker/helper.rb:60:in `map'
    /Users/zee/.rbenv/versions/2.5.1/lib/ruby/gems/2.5.0/bundler/gems/webpacker-a8c46614c675/lib/webpacker/helper.rb:60:in `sources_from_pack_manifest'
    /Users/zee/.rbenv/versions/2.5.1/lib/ruby/gems/2.5.0/bundler/gems/webpacker-a8c46614c675/lib/webpacker/helper.rb:33:in `javascript_pack_tag'
    /Users/zee/WorkSpace/awanmulan/rubyjets/awanmulan_jets/app/views/layouts/application.html.erb:9:in `___sers_zee__ork_pace_awanmulan_rubyjets_awanmulan_jets_app_views_layouts_application_html_erb___760172261659213126_70126484334920'
    /Users/zee/.rbenv/versions/2.5.1/lib/ruby/gems/2.5.0/gems/actionview-5.2.2/lib/action_view/template.rb:159:in `block in render'
    /Users/zee/.rbenv/versions/2.5.1/lib/ruby/gems/2.5.0/gems/activesupport-5.2.2/lib/active_support/notifications.rb:170:in `instrument'
    /Users/zee/.rbenv/versions/2.5.1/lib/ruby/gems/2.5.0/gems/actionview-5.2.2/lib/action_view/template.rb:354:in `instrument_render_template'
    /Users/zee/.rbenv/versions/2.5.1/lib/ruby/gems/2.5.0/gems/actionview-5.2.2/lib/action_view/template.rb:157:in `render'
    /Users/zee/.rbenv/versions/2.5.1/lib/ruby/gems/2.5.0/gems/actionview-5.2.2/lib/action_view/renderer/template_renderer.rb:66:in `render_with_layout'
    /Users/zee/.rbenv/versions/2.5.1/lib/ruby/gems/2.5.0/gems/actionview-5.2.2/lib/action_view/renderer/template_renderer.rb:52:in `render_template'
    /Users/zee/.rbenv/versions/2.5.1/lib/ruby/gems/2.5.0/gems/actionview-5.2.2/lib/action_view/renderer/template_renderer.rb:16:in `render'
    /Users/zee/.rbenv/versions/2.5.1/lib/ruby/gems/2.5.0/gems/actionview-5.2.2/lib/action_view/renderer/renderer.rb:44:in `render_template'
    /Users/zee/.rbenv/versions/2.5.1/lib/ruby/gems/2.5.0/gems/actionview-5.2.2/lib/action_view/renderer/renderer.rb:25:in `render'
    /Users/zee/.rbenv/versions/2.5.1/lib/ruby/gems/2.5.0/gems/actionview-5.2.2/lib/action_view/rendering.rb:103:in `_render_template'
    /Users/zee/.rbenv/versions/2.5.1/lib/ruby/gems/2.5.0/gems/actionpack-5.2.2/lib/action_controller/metal/streaming.rb:219:in `_render_template'
    /Users/zee/.rbenv/versions/2.5.1/lib/ruby/gems/2.5.0/gems/actionview-5.2.2/lib/action_view/rendering.rb:84:in `render_to_body'
    /Users/zee/.rbenv/versions/2.5.1/lib/ruby/gems/2.5.0/gems/actionpack-5.2.2/lib/action_controller/metal/rendering.rb:52:in `render_to_body'
    /Users/zee/.rbenv/versions/2.5.1/lib/ruby/gems/2.5.0/gems/actionpack-5.2.2/lib/action_controller/metal/renderers.rb:142:in `render_to_body'
    /Users/zee/.rbenv/versions/2.5.1/lib/ruby/gems/2.5.0/gems/actionpack-5.2.2/lib/abstract_controller/rendering.rb:46:in `render_to_string'
    /Users/zee/.rbenv/versions/2.5.1/lib/ruby/gems/2.5.0/gems/actionpack-5.2.2/lib/action_controller/metal/rendering.rb:41:in `render_to_string'
    /Users/zee/.rbenv/versions/2.5.1/lib/ruby/gems/2.5.0/gems/actionpack-5.2.2/lib/action_controller/renderer.rb:83:in `render'
    /Users/zee/.rbenv/versions/2.5.1/lib/ruby/gems/2.5.0/gems/jets-1.3.6/lib/jets/controller/renderers/template_renderer.rb:16:in `render'
    /Users/zee/.rbenv/versions/2.5.1/lib/ruby/gems/2.5.0/gems/jets-1.3.6/lib/jets/controller/rendering.rb:11:in `ensure_render'
    /Users/zee/.rbenv/versions/2.5.1/lib/ruby/gems/2.5.0/gems/jets-1.3.6/lib/jets/controller/base.rb:42:in `dispatch!'
    /Users/zee/.rbenv/versions/2.5.1/lib/ruby/gems/2.5.0/gems/jets-1.3.6/lib/jets/controller/middleware/main.rb:26:in `call!'
    /Users/zee/.rbenv/versions/2.5.1/lib/ruby/gems/2.5.0/gems/jets-1.3.6/lib/jets/controller/middleware/main.rb:21:in `call'
    /Users/zee/.rbenv/versions/2.5.1/lib/ruby/gems/2.5.0/gems/jets-1.3.6/lib/jets/controller/middleware/main.rb:43:in `call'
    /Users/zee/.rbenv/versions/2.5.1/lib/ruby/gems/2.5.0/bundler/gems/webpacker-a8c46614c675/lib/webpacker/dev_server_proxy.rb:18:in `perform_request'
    /Users/zee/.rbenv/versions/2.5.1/lib/ruby/gems/2.5.0/gems/rack-proxy-0.6.5/lib/rack/proxy.rb:57:in `call'
    /Users/zee/.rbenv/versions/2.5.1/lib/ruby/gems/2.5.0/gems/rack-2.0.6/lib/rack/etag.rb:25:in `call'
    /Users/zee/.rbenv/versions/2.5.1/lib/ruby/gems/2.5.0/gems/rack-2.0.6/lib/rack/conditional_get.rb:25:in `call'
    /Users/zee/.rbenv/versions/2.5.1/lib/ruby/gems/2.5.0/gems/rack-2.0.6/lib/rack/head.rb:12:in `call'
    /Users/zee/.rbenv/versions/2.5.1/lib/ruby/gems/2.5.0/gems/rack-2.0.6/lib/rack/session/abstract/id.rb:232:in `context'
    /Users/zee/.rbenv/versions/2.5.1/lib/ruby/gems/2.5.0/gems/rack-2.0.6/lib/rack/session/abstract/id.rb:226:in `call'
    /Users/zee/.rbenv/versions/2.5.1/lib/ruby/gems/2.5.0/gems/jets-1.3.6/lib/jets/controller/middleware/local.rb:43:in `call'
    /Users/zee/.rbenv/versions/2.5.1/lib/ruby/gems/2.5.0/gems/rack-2.0.6/lib/rack/method_override.rb:22:in `call'
    /Users/zee/.rbenv/versions/2.5.1/lib/ruby/gems/2.5.0/gems/rack-2.0.6/lib/rack/runtime.rb:22:in `call'
    /Users/zee/.rbenv/versions/2.5.1/lib/ruby/gems/2.5.0/gems/jets-1.3.6/lib/jets/middleware.rb:12:in `call'
    /Users/zee/.rbenv/versions/2.5.1/lib/ruby/gems/2.5.0/gems/rack-2.0.6/lib/rack/lint.rb:49:in `_call'
    /Users/zee/.rbenv/versions/2.5.1/lib/ruby/gems/2.5.0/gems/rack-2.0.6/lib/rack/lint.rb:37:in `call'
    /Users/zee/.rbenv/versions/2.5.1/lib/ruby/gems/2.5.0/gems/rack-2.0.6/lib/rack/show_exceptions.rb:23:in `call'
    /Users/zee/.rbenv/versions/2.5.1/lib/ruby/gems/2.5.0/gems/rack-2.0.6/lib/rack/common_logger.rb:33:in `call'
    /Users/zee/.rbenv/versions/2.5.1/lib/ruby/gems/2.5.0/gems/shotgun-0.9.2/lib/shotgun/loader.rb:86:in `proceed_as_child'
    /Users/zee/.rbenv/versions/2.5.1/lib/ruby/gems/2.5.0/gems/shotgun-0.9.2/lib/shotgun/loader.rb:31:in `call!'
    /Users/zee/.rbenv/versions/2.5.1/lib/ruby/gems/2.5.0/gems/shotgun-0.9.2/lib/shotgun/loader.rb:18:in `call'
    /Users/zee/.rbenv/versions/2.5.1/lib/ruby/gems/2.5.0/gems/shotgun-0.9.2/lib/shotgun/favicon.rb:12:in `call'
    /Users/zee/.rbenv/versions/2.5.1/lib/ruby/gems/2.5.0/gems/shotgun-0.9.2/lib/shotgun/static.rb:14:in `call'
    /Users/zee/.rbenv/versions/2.5.1/lib/ruby/gems/2.5.0/gems/rack-2.0.6/lib/rack/urlmap.rb:68:in `block in call'
    /Users/zee/.rbenv/versions/2.5.1/lib/ruby/gems/2.5.0/gems/rack-2.0.6/lib/rack/urlmap.rb:53:in `each'
    /Users/zee/.rbenv/versions/2.5.1/lib/ruby/gems/2.5.0/gems/rack-2.0.6/lib/rack/urlmap.rb:53:in `call'
    /Users/zee/.rbenv/versions/2.5.1/lib/ruby/gems/2.5.0/gems/rack-2.0.6/lib/rack/builder.rb:153:in `call'
    /Users/zee/.rbenv/versions/2.5.1/lib/ruby/gems/2.5.0/gems/rack-2.0.6/lib/rack/handler/webrick.rb:86:in `service'
    /Users/zee/.rbenv/versions/2.5.1/lib/ruby/2.5.0/webrick/httpserver.rb:140:in `service'
    /Users/zee/.rbenv/versions/2.5.1/lib/ruby/2.5.0/webrick/httpserver.rb:96:in `run'
    /Users/zee/.rbenv/versions/2.5.1/lib/ruby/2.5.0/webrick/server.rb:307:in `block in start_thread'`
tongueroo commented 5 years ago

Okay, sent you a pull request in the repo you gave me access to which fixes the issue 👍 For those interested, pull request sets up webpacker properly. Think webpacker was not set up because, in the process of copying the files over, the package.json that Jets sets up got overwritten. The current package.json that jets new generates contains the npm rails/webpacker package in it. Something like this:

{
  "devDependencies": {
    "webpack-cli": "^3.1.2",
    "webpack-dev-server": "^3.1.10"
  },
  "dependencies": {
    "@rails/webpacker": "^3.5.5",
    "bootstrap": "4.0.0-beta",
    "coffeescript": "1.12.7",
    "jquery": "^3.3.1",
    "popper.js": "^1.14.6"
  }
}

This is why the error above was complaining about webpacker. Because the npm package wasn't set it, the webpacker middleware wasn't doing it's thing and dynamically compiling the assets for the project in development mode.

With this "full port" approach, want to say that it's a decent amount of work. Though Jets helpers, controllers, and views looks like Rails they do work differently. So would generally recommend Mega Mode where running Rails is more effortlessly. It takes a few mins. Of course, it depends what you're trying to achieve. 👌

Closing out.