You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
Hey, you've got LiveReload in my Rack!
No need for browser extensions anymore! Just plug it in your middleware stack and go!
Even supports browsers without WebSockets!
Then add the middleware to your Rails middleware stack by editing your config/environments/development.rb.
# config/environments/development.rbMyApp::Application.configuredo# Add Rack::LiveReload to the bottom of the middleware stack with the default options:config.middleware.insert_afterActionDispatch::Static,Rack::LiveReload# or, if you're using better_errors:config.middleware.insert_beforeRack::Lock,Rack::LiveReload# or, if you're using better_errors with rails 6.config.middleware.insert_beforeRack::Runtime,Rack::LiveReload# ...end
In addition, Rack::LiveReload's position within middleware stack can be
specified by inserting it relative to an existing middleware via
insert_before or insert_after. See the Rails on Rack: Adding a
Middleware
section for more detail.
The necessary script tag to bring in a copy of livereload.js is
injected right after the opening head tag in any text/html pages that come through. The script tag is built in
such a way that the HTTP_HOST is used as the LiveReload host, so you can connect from external machines (say, to
mycomputer:3000 instead of localhost:3000) and as long as the LiveReload port is accessible from the external machine,
you'll connect and be LiveReloading away!
Which LiveReload script does it use?
If you've got a LiveReload watcher running on the same machine as the app that responds
to https://localhost:35729/livereload.js, that gets used, with the hostname being changed when
injected into the HTML page.
If you don't, the copy vendored with rack-livereload is used.
You can force the use of either one (and save on the cost of checking to see if that file
is available) with the middleware option :source => :vendored or :source => :livereload.
How about non-WebSocket-enabled browsers?
For browsers that don't support WebSockets, but do support Flash, web-socket-js
is loaded. By default, this is done transparently, so you'll get a copy of swfobject.js and web_socket.js loaded even if
your browser doesn't need it. The SWF WebSocket implementor won't be loaded unless your browser has no native
WebSockets support or if you force it in the middleware stack:
useRack::LiveReload,force_swf: true
If you don't want any of the web-sockets-js code included at all, use the no_swf option:
useRack::LiveReload,no_swf: true
Once more browsers support WebSockets than don't, this option will be reversed and you'll have
to explicitly include the Flash shim.
Rack support
Rack 2 is supported until version 0.5.x and is maintained in the rack2 branch