Our goal: remove nodejs
As many other people in the Rails community, I started setting up brand new Rails 7 projects, and I need to re-l...
For further actions, you may consider blocking this person and/or reporting abuse
Great write up Alessandro. What I don't understand is if import maps loads libraries via CDN, why is the Bootstrap gem still needed? You could load Bootstrap straight into the header without all this hassle.
Hi Hashim,
yes, correct. You could load Bootstrap Javascript part through CDN, but you would still need the gem to use the SCSS stylesheets and customise it. Now, since you have the gem, I think is wise to use also the JS wrapped within the gem, so that you don't risk having divergent versions (one from CDN and one from the Gem).
Of course, if you don't need to customise bootstrap, then you can load everything from CDN.
Excellent and helpful article. Thanks Alessandro
Tried the whole day to get Bootstrap working with Rails 7.
This method works awesome.
Thank you. Clears up a lot of confusion. The dependancies and/or defaults of the Rails 7 options aren't clear.
Another confusion for me. Is Sprockets the way forward or?
Probably would help if you showed all your changed or added code. Would help avoid the confusion @ochupa faced.
Don't think this really "works without node" - bootstrap gem does not work if there is no execjs runtime (just try removing executable permission from your NodeJS installation on the system) because autoprefixer needs it. Is there some magic way to force it to use something else?
Good point! Yes, you can also use another runtime: github.com/ai/autoprefixer-rails#u...
I am also running into this problem with execjs.
I was hoping to set things up so that node is only needed in development, but not in production.
I would then have a two-stage Dockerfile where the assets precompile run is done with node present, but then node should not be needed.
Unfortunately, the execjs error about missing node prevents me from opening a rails console or running db:migrate.
I haven't managed to make this work using groups or require: false in my Gemfile.
Thanks bro.
Hi, I tried this but the CSS is not working. I get this error from the browser console:
seems like the @import "bootstrap" call inside application.css is importing the bootstrap javascript, because in Style editor of Firefox, I see a bootstrap file that is just javascript
ok, seems like I needed to rename "application.css" to "application.scss"
Hey!
I think this could be made simpler.
I believe the bootstrap-rubygem already injects in the assets throughs sprockets the
bootstrap.min.js
and SCSS files, and also thepoper.js
through the dependency popper_js-rubygem.So, in terms of the JS files, all we need to do, after bundeling the bootstrap-rubygem, is import them in the
application.js
I have this working in development.
Thanks. This is simpler.
In application.js :
give this error for me on browser :
full error log:
I miss the
bundle add bootstrap
This is a pretty neat solution, all work is done by Sprockets as intended. No Node, no Foreman, great.
However, enabling
sassc-rails
in Gemfile brings in embeddedsassc
, based on now deprecatedlibsass
v3.5 which does not handle modern Sass. So no@use
directives, no color functions likecolor.adjust
, etc., and one gets errors like:SassC::SyntaxError: Error: Function hsl is missing argument $saturation.
(that is if color variables are defined in modern format — without commas, e.g.$body-text-color: hsl(0deg 0% 20%)
).Is there a way to integrate Dart Sass into Sprockets or I am missing something?
Hey Alessandro, I'm trying to add 'bootstrap-rails' gem but getting error - Could not find gem 'bootstrap-rails' in rubygems repository rubygems.org/ or installed locally.
Could help with the proper name of bootstrap gem?
I think he is talking about github.com/twbs/bootstrap-rubygem. Therefore the gem name is just 'bootstrap'.
Correct me if I'm wrong.
Thanks for a helpful, concise post.
config/initializers/assets.rb
.As I'm stuck on Bootstrap 4, I experienced problems with jquery and also struggled to get the
popper.js
bundled with thebootstrap
(@4.5) gem to work.Solved using the following pins (the CDN for jquery is important as mentioned on SO above):
First of all, thanks Alessandro. It's clear and gets direct to the point. Unfortunately, I couldn't make it work. I created a new project to test this out and followed exactly the steps described here. After that, I've added a simple navbar from Bootstrap examples, that contains a dropdown (making it need bootstrap.js). The styles look good but the dropdown doesn't work. Here the repo if anybody wants to take a look and have an idea on what's wrong: github.com/matiasalbarello/test-im...
If anybody has a working example would be great! Please share if so :)
In case it helps someone: I was using the wrong navbar example from bootstrap page (using from version 4 instead of 5). Also found that these steps are followed in this app template: railsbytes.com/public/templates/V2...
The initial tutorial works fine. However, if I copy the application to another folder, and delete all the parts that normally do not make it into GitHub (using a rails .gitignorefile), then run: bundle install, followed by a rails s command, then go to 127.0.0.1:3000/, I get the following error:
Showing /Users/joseph-mac/ProxLearn/Development/PLIConnectV2/repositories/pli2-no-node/app/views/layouts/application.html.slim where line # raised:
link_tree argument must be a directory
//= link_directory ../stylesheets .css
//= link_tree ../../javascript .js
//= link_tree ../../../vendor/javascript .js
Nice. I had to run the rails assets:precompile after adding javascript part as well to get it to work.
Question: Can i just rename the 'application.css' to 'application.scss' (I did and it seems ok but should i think of anything else when doing so?)
Questions: Importmap does not bundle or build compiled javascript, thus, jsx, by example, is not working. Until now i havent used react in rails, for my current needs it would be enough, but the day may come.
As i understood, you have to decide which rail you choose: you cannot use importmap and add Shakapacker or jsbundling later for using it alongside importmap.
How do you think?
Thanks for the guide! I believe it should be
Actually it's not. The bootstrap gem dependes on the popper_js gem
Thanks for this, bookmarking for future reference. :)
There should be bootstrap gem instead of bootstrap-rails gem
Still Very Helpfull, Thank you Sir!
Helpful
This is great, but rails g scaffold doesn't use bootstrap templates which is a bit annoying, any solution to that?
popper.js is not running when I install Bootstrap with this method. However bootstrap.js is working. Any ideas why?
too few details, sorry. I'd suggest opeining a question on stackoverflow with more details.
Thx Alessandro! Following your approach I have added Simple Form:
gem 'simple_form'
and run the command:
bin/rails generate simple_form:install --bootstrap
It works fine.