I am using rails 5.1.7 with the gem react-rails.
I added a react component in a erb view as:
<%= react_component("cardlist", { all_cards: @all_cards }, {prerender: true}) %>
Which works fine on my local environment, but when deploying the app to heroku, if I try to access the erb containing the react_component
helper I get the following message in the logs:
ActionView::Template::Error (No such file or directory @ rb_sysopen - /app/public/packs/js/server_rendering-7bdf65f03078e0e44c86.js
I have tried adding an App component as well and rendering that instead, but it keeps giving the same messages.
I have also added a node buildpack on heroku and I ensured the app only uses npm instead of yarn, with the node version added:
"engines": {
"node": "12.18.3"
}
But I always get the same message
ActionView::Template::Error (No such file or directory @ rb_sysopen - /app/public/packs/js/server_rendering-7bdf65f03078e0e44c86.js
If I set pre render to true the component appears in production with no errors on the log, but I need it done with server rendering.
After deleting the files in public/packs and compiling in the production environment as Justing suggested I am getting:
2020-09-30T05:35:06.341918+00:00 app[web.1]: F, [2020-09-30T05:35:06.341829 #4] FATAL -- : [ce9e5a3a-b642-4de0-bb80-e4210172c687] ActionView::Template::Error (Webpacker can't find server_rendering.js in /app/public/packs/manifest.json. Possible causes:
2020-09-30T05:35:06.341919+00:00 app[web.1]: 1. You want to set webpacker.yml value of compile to true for your environment
2020-09-30T05:35:06.341919+00:00 app[web.1]: unless you are using the `webpack -w` or the webpack-dev-server.
2020-09-30T05:35:06.341920+00:00 app[web.1]: 2. webpack has not yet re-run to reflect updates.
2020-09-30T05:35:06.341921+00:00 app[web.1]: 3. You have misconfigured Webpacker's config/webpacker.yml file.
2020-09-30T05:35:06.341921+00:00 app[web.1]: 4. Your webpack configuration is not creating a manifest.
2020-09-30T05:35:06.341922+00:00 app[web.1]: Your manifest contains:
2020-09-30T05:35:06.341922+00:00 app[web.1]: {
2020-09-30T05:35:06.341923+00:00 app[web.1]: }
2020-09-30T05:35:06.341923+00:00 app[web.1]: ):
2020-09-30T05:35:06.342250+00:00 app[web.1]: F, [2020-09-30T05:35:06.342174 #4] FATAL -- : [ce9e5a3a-b642-4de0-bb80-e4210172c687] 44: <% @hotel_search_filter = t :hotel_search__filter %>
2020-09-30T05:35:06.342252+00:00 app[web.1]: [ce9e5a3a-b642-4de0-bb80-e4210172c687] 46: <%= @count_filters = count_filters %>
2020-09-30T05:35:06.342255+00:00 app[web.1]: [ce9e5a3a-b642-4de0-bb80-e4210172c687] 47: <%= react_component("App", { all_ro
My webpack config file:
# Note: You must restart bin/webpack-dev-server for changes to take effect
default: &default
source_path: app/javascript
source_entry_path: packs
public_root_path: public
public_output_path: packs
cache_path: tmp/cache/webpacker
check_yarn_integrity: false
webpack_compile_output: true
# Additional paths webpack should lookup modules
# ['app/assets', 'engine/foo/app/assets']
resolved_paths: []
# Reload manifest.json on all requests so we reload latest compiled packs
cache_manifest: false
# Extract and emit a css file
extract_css: false
static_assets_extensions:
- .jpg
- .jpeg
- .png
- .gif
- .tiff
- .ico
- .svg
- .eot
- .otf
- .ttf
- .woff
- .woff2
extensions:
- .jsx
- .mjs
- .js
- .sass
- .scss
- .css
- .module.sass
- .module.scss
- .module.css
- .png
- .svg
- .gif
- .jpeg
- .jpg
development:
<<: *default
compile: true
# Verifies that correct packages and versions are installed by inspecting package.json, yarn.lock, and node_modules
check_yarn_integrity: true
# Reference: https://webpack.js.org/configuration/dev-server/
dev_server:
https: false
host: localhost
port: 3035
public: localhost:3035
hmr: false
# Inline should be set to true if using HMR
inline: true
overlay: true
compress: true
disable_host_check: true
use_local_ip: false
quiet: false
pretty: false
headers:
'Access-Control-Allow-Origin': '*'
watch_options:
ignored: '**/node_modules/**'
test:
<<: *default
compile: true
# Compile test packs to a separate directory
public_output_path: packs-test
production:
<<: *default
# Production depends on precompilation of packs prior to booting for performance.
compile: true
# Extract and emit a css file
extract_css: true
# Cache manifest.json for performance
cache_manifest: true
Did you try precompiling locally?
Then run your rails app with
The error should be pretty obvious. My guess is that you have some error during the precompile so the file
js/server_rendering-7bdf65f03078e0e44c86.js
doesn't exist.You might also want to ensure that you don't have any files in your /public/packs directory checked into your git repo.