Install Ruby on Rails on a Raspberry Pi
The Ruby on Rails website asks you to "imagine what you could build if you learned Ruby on Rails." A few popular options include websites, careers, and businesses. In short—if you can build it on the web, you can build it with Rails.
This post shows one easy way to get started: installing Ruby on Rails onto the simplest computer on Earth: the Raspberry Pi. These instructions are aimed at beginners. Experienced programmers can also skip to an install script.
Our goal is the Rails welcome screen:

Ruby on Rails—Welcome Screen
If we see this screen, it means Rails is running on the Pi.
After you get through this guide, I highly recommend reading Michael Hartl's Rails Tutorial to learn the basics of Rails. But before all that, we need to get set up—and that's what this post covers.
Ruby on Rails ("Rails") is an open source web development framework. Rails is like Legos for building professional-grade web projects. Many high-profile websites, apps, blogs, newsletters, APIs, and other web-based tools were built on Rails (like Shopify, Twitter, Airbnb, GitHub, Pinterest, HEY).
The Raspberry Pi ("Pi") is an open source computer designed for learning. Pis are cheap, simple, and versatile. You can learn more about the Pi here, including how to make one from scratch.
Combining Rails and Pi, we can dramatically lower barriers to learning and building online.
This installation occurs entirely at the command line. On the Pi, we use an application called the "terminal."
From the desktop, the terminal is here:
It opens this:
Terminal responds to commands:

Passing a string—"Welcome to the terminal!"—to the echo
command
Note: This tutorial does not cover terminal commands beyond what we need to install Rails. For an intro to Linux commands, this is one place to start.
Quick word of encouragement
If you're new to command line computing, this tutorial will probably feel complicated and over your head. Many newbies give up during command line installations because things seem harder than they are (a shame on both points).
I encourage you to stick with it. It's worthwhile learning even if you end up moving to other technologies later.
When things seem complex, it's usually to accommodate the open source community in some meaningful way. One big upside to open source is a global community of smart people who make and maintain software for everyone to use. This community tends to prioritize accessibility above simplicity. It's a subtle but important part of the open source ethos.
Here are some final words of support if you run into issues or feel overwhelmed:
- Don't worry about details at first. Working > 100% understanding everything.
- Breaking stuff is normal. It's part of the process.
- Keep hacking. When things break, read the error messages, Google them, tweak things, repeat. Ask for help if you get stuck. See this.
- Duh! moments are common. Sometimes you get the hard stuff right but make a simple error&mdashspelling errors, forgetting to close parentheses, comma instead of period, etc..
- It gets much easier with time.
- Multi-billion dollar companies use this software. You're learning a real tool. You won't be an expert overnight.
Let's start with an overview of the steps we'll take.
First, we'll manually run each of these commands in the terminal:
The lines starting with #
are comments. The rest are actual commands.
Second, when the commands finish, we'll confirm that Ruby and Rails successfully installed:
pi@raspberrypi:~ $ ruby -v
ruby 2.7.0p0 (2019-12-25 revision 647ee6f091) [armv7l-linux-eabihf]
pi@raspberrypi:~ $ rails -v
Rails 6.0.3.4
Note: -v
is the flag for version in both Ruby and Rails. Flags are a way to set options and pass in arguments to the commands you run. Commands you run will change their behavior based on what flags are set.
Last, we'll create a new Rails application, navigate to its directory, and start a web server:
pi@raspberrypi:~ $ rails new test_app
[output omitted]
pi@raspberrypi:~ $ cd test_app
pi@raspberrypi:~ $ rails server
[output omitted]
We should be able to open a web browser and see the Rails welcome screen at http://localhost:3000
:

Ruby on Rails—Welcome Screen
The rest of this tutorial goes through each step in detail.
Our first task is to update Pi's current software package versions:
pi@raspberrypi:~ $ sudo apt update
We can run this command from any location on the Pi (run pwd
to see your current location).
Here's what sudo apt update
does:
sudo
means "Super User Do." It flips the computer into "superuser" mode for the command. This allows us to work with software packages as a fully-permissioned super user.
apt
means "Advanced Packaging Tool." It's software that comes with Linux for installing, removing, and performing other operations on installed software packages.
update
fetches lists of relevant software versions to make sure we have information about the newest package versions and their dependencies.
No need to understand all the details right now. All you need to know is that we're grabbing information about the latest software versions. We are not installing anything yet.
pi@raspberrypi:~ $ sudo apt update
Hit:1 http://raspbian.raspberrypi.org/raspbian buster InRelease
Hit:2 http://archive.raspberrypi.org/debian buster InRelease
Reading package lists... Done
Building dependency tree
Reading state information... Done
All packages are up to date.
The next command is simpler than it looks:
pi@raspberrypi:~ $ sudo apt install -y curl build-essential zlib1g-dev libreadline-dev libssl-dev libxml2-dev nodejs
Here we're using sudo apt install
to install several foundational software development packages. The -y
flag automatically answers "yes" to any yes/no prompts during the installation process. The remaining commands are the names of packages we're going to install.
The packages are:
No need to understand the details. What you need to know is that when we run the script, apt
downloads and installs the packages and their dependencies on your Pi.
pi@raspberrypi:~ $ sudo apt install -y curl build-essential zlib1g-dev libreadline-dev libssl-dev libxml2-dev nodejs
Reading package lists... Done
Building dependency tree
Reading state information... Done
build-essential is already the newest version (12.6).
curl is already the newest version (7.64.0-4+deb10u1).
zlib1g-dev is already the newest version (1:1.2.11.dfsg-1).
zlib1g-dev set to manually installed.
The following additional packages will be installed:
icu-devtools libc-ares2 libicu-dev libncurses-dev libnode64 libuv1
nodejs-doc
Suggested packages:
icu-doc ncurses-doc readline-doc libssl-doc npm
The following NEW packages will be installed:
icu-devtools libc-ares2 libicu-dev libncurses-dev libnode64 libreadline-dev
libssl-dev libuv1 libxml2-dev nodejs nodejs-doc
0 upgraded, 11 newly installed, 0 to remove and 0 not upgraded.
Need to get 17.7 MB of archives.
After this operation, 78.7 MB of additional disk space will be used.
Get:1 http://archive.raspberrypi.org/debian buster/main armhf libssl-dev armhf | 1.1.1d-0+deb10u3+rpt1 [1,583 kB]
Get:2 http://mirrors.syringanetworks.net/raspbian/raspbian buster/main armhf | icu-devtools armhf 63.1-6+deb10u1 [163 kB]
Get:3 http://mirrors.syringanetworks.net/raspbian/raspbian buster/main armhf | libc-ares2 armhf 1.14.0-1 [80.4 kB]
Get:4 http://mirrors.syringanetworks.net/raspbian/raspbian buster/main armhf | libicu-dev armhf 63.1-6+deb10u1 [8,841 kB]
Get:5 http://mirrors.syringanetworks.net/raspbian/raspbian buster/main armhf | libncurses-dev armhf 6.1+20181013-2+deb10u2 [278 kB]
Get:6 http://mirrors.syringanetworks.net/raspbian/raspbian buster/main armhf | libuv1 armhf 1.24.1-1 [96.7 kB]
Get:7 http://mirrors.syringanetworks.net/raspbian/raspbian buster/main armhf | libnode64 armhf 10.21.0~dfsg-1~deb10u1+rpi1 [4,863 kB]
Get:8 http://mirrors.syringanetworks.net/raspbian/raspbian buster/main armhf | libreadline-dev armhf 7.0-5 [110 kB]
Get:9 http://mirrors.syringanetworks.net/raspbian/raspbian buster/main armhf | libxml2-dev armhf 2.9.4+dfsg1-7+b3 [641 kB]
Get:10 http://mirrors.syringanetworks.net/raspbian/raspbian buster/main armhf | nodejs armhf 10.21.0~dfsg-1~deb10u1+rpi1 [87.1 kB]
Get:11 http://mirrors.syringanetworks.net/raspbian/raspbian buster/main armhf | nodejs-doc all 10.21.0~dfsg-1~deb10u1+rpi1 [973 kB]
Fetched 17.7 MB in 12s (1,530 kB/s)
Selecting previously unselected package icu-devtools.
(Reading database ... 93810 files and directories currently installed.)
Preparing to unpack .../00-icu-devtools_63.1-6+deb10u1_armhf.deb ...
Unpacking icu-devtools (63.1-6+deb10u1) ...
Selecting previously unselected package libc-ares2:armhf.
Preparing to unpack .../01-libc-ares2_1.14.0-1_armhf.deb ...
Unpacking libc-ares2:armhf (1.14.0-1) ...
Selecting previously unselected package libicu-dev:armhf.
Preparing to unpack .../02-libicu-dev_63.1-6+deb10u1_armhf.deb ...
Unpacking libicu-dev:armhf (63.1-6+deb10u1) ...
Selecting previously unselected package libncurses-dev:armhf.
Preparing to unpack .../03-libncurses-dev_6.1+20181013-2+deb10u2_armhf.deb ...
Unpacking libncurses-dev:armhf (6.1+20181013-2+deb10u2) ...
Selecting previously unselected package libuv1:armhf.
Preparing to unpack .../04-libuv1_1.24.1-1_armhf.deb ...
Unpacking libuv1:armhf (1.24.1-1) ...
Selecting previously unselected package libnode64:armhf.
Preparing to unpack .../05-libnode64_10.21.0~dfsg-1~deb10u1+rpi1_armhf.deb ...
Unpacking libnode64:armhf (10.21.0~dfsg-1~deb10u1+rpi1) ...
Selecting previously unselected package libreadline-dev:armhf.
Preparing to unpack .../06-libreadline-dev_7.0-5_armhf.deb ...
Unpacking libreadline-dev:armhf (7.0-5) ...
Selecting previously unselected package libssl-dev:armhf.
Preparing to unpack .../07-libssl-dev_1.1.1d-0+deb10u3+rpt1_armhf.deb ...
Unpacking libssl-dev:armhf (1.1.1d-0+deb10u3+rpt1) ...
Selecting previously unselected package libxml2-dev:armhf.
Preparing to unpack .../08-libxml2-dev_2.9.4+dfsg1-7+b3_armhf.deb ...
Unpacking libxml2-dev:armhf (2.9.4+dfsg1-7+b3) ...
Selecting previously unselected package nodejs.
Preparing to unpack .../09-nodejs_10.21.0~dfsg-1~deb10u1+rpi1_armhf.deb ...
Unpacking nodejs (10.21.0~dfsg-1~deb10u1+rpi1) ...
Selecting previously unselected package nodejs-doc.
Preparing to unpack .../10-nodejs-doc_10.21.0~dfsg-1~deb10u1+rpi1_all.deb ...
Unpacking nodejs-doc (10.21.0~dfsg-1~deb10u1+rpi1) ...
Setting up libncurses-dev:armhf (6.1+20181013-2+deb10u2) ...
Setting up libc-ares2:armhf (1.14.0-1) ...
Setting up libreadline-dev:armhf (7.0-5) ...
Setting up libuv1:armhf (1.24.1-1) ...
Setting up libssl-dev:armhf (1.1.1d-0+deb10u3+rpt1) ...
Setting up libnode64:armhf (10.21.0~dfsg-1~deb10u1+rpi1) ...
Setting up icu-devtools (63.1-6+deb10u1) ...
Setting up nodejs-doc (10.21.0~dfsg-1~deb10u1+rpi1) ...
Setting up libicu-dev:armhf (63.1-6+deb10u1) ...
Setting up nodejs (10.21.0~dfsg-1~deb10u1+rpi1) ...
update-alternatives: using /usr/bin/nodejs to provide /usr/bin/js (js) in auto mode
Setting up libxml2-dev:armhf (2.9.4+dfsg1-7+b3) ...
Processing triggers for libc-bin (2.28-10+rpi1) ...
Processing triggers for man-db (2.8.5-2) ...
Processing triggers for install-info (6.5.0.dfsg.1-4+b1) ...
Next we'll install Ruby and Rails with a program called RVM (Ruby Version Manager). It takes three commands to get RVM, Ruby, and Rails up and running.
First, we use gpg
(GnuPrivacy Guard) to get the cryptographic keys RVM needs:
pi@raspberrypi:~ $ gpg --recv-keys 409B6B1796C275462A1703113804BB82D39DC0E3 7D2BAF1CF37B13E2069D6956105BD0E739499BDB
pi@raspberrypi:~ $ gpg --recv-keys 409B6B1796C275462A1703113804BB82D39DC0E3 7D2BAF1CF37B13E2069D6956105BD0E739499BDB
gpg: keybox '/home/pi/.gnupg/pubring.kbx' created
gpg: /home/pi/.gnupg/trustdb.gpg: trustdb created
gpg: key 105BD0E739499BDB: public key "Piotr Kuczynski
" imported
gpg: key 3804BB82D39DC0E3: new key but contains no user ID - skipped
gpg: Total number processed: 2
gpg: w/o user IDs: 1
gpg: imported: 1
Second, we use curl
and bash
commands to install RVM:
pi@raspberrypi:~ $ curl -sSL https://get.rvm.io | bash -s stable --rails
The --rails
flag tells RVM to install Ruby and Rails. This script will take several minutes to run.
pi@raspberrypi:~ $ curl -sSL https://get.rvm.io | bash -s stable --rails
Downloading https://github.com/rvm/rvm/archive/1.29.10.tar.gz
Downloading https://github.com/rvm/rvm/releases/download/1.29.10/1.29.10.tar.gz.asc
gpg: Signature made Wed 25 Mar 2020 02:58:42 PM PDT
gpg: using RSA key 7D2BAF1CF37B13E2069D6956105BD0E739499BDB
gpg: Good signature from "Piotr Kuczynski " [unknown]
Primary key fingerprint: 7D2B AF1C F37B 13E2 069D 6956 105B D0E7 3949 9BDB
GPG verified '/home/pi/.rvm/archives/rvm-1.29.10.tgz'
Installing RVM to /home/pi/.rvm/
Adding rvm PATH line to /home/pi/.profile /home/pi/.mkshrc /home/pi/.bashrc /home/pi/.zshrc.
Adding rvm loading line to /home/pi/.profile /home/pi/.bash_profile /home/pi/.zlogin.
Installation of RVM in /home/pi/.rvm/ is almost complete:
* To start using RVM you need to run `source /home/pi/.rvm/scripts/rvm`
in all your open shell windows, in rare cases you need to reopen all shell windows.
Thanks for installing RVM 🙏
Please consider donating to our open collective to help us maintain RVM.
👉 Donate: https://opencollective.com/rvm/donate
Ruby enVironment Manager 1.29.10 (latest) (c) 2009-2017 Michal Papis, Piotr Kuczynski, Wayne E. Seguin
Searching for binary rubies, this might take some time.
No binary rubies available for: debian/10/armhf/ruby-2.7.0.
Continuing with compilation. Please read 'rvm help mount' to get more information on binary rubies.
Checking requirements for debian.
Installing requirements for debian.
Updating system...
Installing required packages: gawk, autoconf, automake, bison, libffi-dev, libgdbm-dev, libncurses5-dev, libsqlite3-dev, libtool, libyaml-dev, sqlite3, libgmp-dev..............
Requirements installation successful.
Installing Ruby from source to: /home/pi/.rvm/rubies/ruby-2.7.0, this may take a while depending on your cpu(s)...
ruby-2.7.0 - #downloading ruby-2.7.0, this may take a while depending on your connection...
% Total % Received % Xferd Average Speed Time Time Time Current
Dload Upload Total Spent Left Speed
100 14.0M 100 14.0M 0 0 1357k 0 0:00:100:00:10 --:--:-- 3095k
ruby-2.7.0 - #extracting ruby-2.7.0 to /home/pi/.rvm/src/ruby-2.7.0.....
ruby-2.7.0 - #configuring.............................................|
ruby-2.7.0 - #post-configuration..
ruby-2.7.0 - #compiling............................................|
ruby-2.7.0 - #installing.................
ruby-2.7.0 - #making binaries executable...
Installed rubygems 3.1.2 is newer than 3.0.8 provided with installed ruby, skipping installation, use --force to force installation.
ruby-2.7.0 - #gemset created /home/pi/.rvm/gems/ruby-2.7.0@global
ruby-2.7.0 - #importing gemset /home/pi/.rvm/gemsets/global.gems...............-
ruby-2.7.0 - #generating global wrappers.......
ruby-2.7.0 - #gemset created /home/pi/.rvm/gems/ruby-2.7.0
ruby-2.7.0 - #importing gemsetfile /home/pi/.rvm/gemsets/default.gems evaluated to empty gem list
ruby-2.7.0 - #generating default wrappers.......
ruby-2.7.0 - #adjusting #shebangs for (gem irb erb ri rdoc testrb rake).
Install of ruby-2.7.0 - #complete
Ruby was built without documentation, to build it run: rvm docs generate-ri
Creating alias default for ruby-2.7.0....
Fetching i18n-1.8.5.gem
Fetching activesupport-6.0.3.4.gem
Fetching thread_safe-0.3.6.gem
Fetching concurrent-ruby-1.1.7.gem
Fetching tzinfo-1.2.7.gem
Fetching zeitwerk-2.4.0.gem
Fetching rack-test-1.1.0.gem
Fetching rack-2.2.3.gem
Fetching mini_portile2-2.4.0.gem
Fetching nokogiri-1.10.10.gem
Fetching crass-1.0.6.gem
Fetching loofah-2.7.0.gem
Fetching rails-html-sanitizer-1.3.0.gem
Fetching rails-dom-testing-2.0.3.gem
Fetching builder-3.2.4.gem
Fetching erubi-1.9.0.gem
Fetching actionview-6.0.3.4.gem
Fetching activejob-6.0.3.4.gem
Fetching activemodel-6.0.3.4.gem
Fetching actionpack-6.0.3.4.gem
Fetching globalid-0.4.2.gem
Fetching activerecord-6.0.3.4.gem
Fetching mini_mime-1.0.2.gem
Fetching mail-2.7.1.gem
Fetching actionmailer-6.0.3.4.gem
Fetching nio4r-2.5.4.gem
Fetching websocket-extensions-0.1.5.gem
Fetching websocket-driver-0.7.3.gem
Fetching actioncable-6.0.3.4.gem
Fetching mimemagic-0.3.5.gem
Fetching marcel-0.3.3.gem
Fetching actiontext-6.0.3.4.gem
Fetching activestorage-6.0.3.4.gem
Fetching actionmailbox-6.0.3.4.gem
Fetching thor-1.0.1.gem
Fetching method_source-1.0.0.gem
Fetching railties-6.0.3.4.gem
Fetching sprockets-4.0.2.gem
Fetching sprockets-rails-3.2.2.gem
Fetching rails-6.0.3.4.gem
Successfully installed concurrent-ruby-1.1.7
HEADS UP! i18n 1.1 changed fallbacks to exclude default locale.
But that may break your application.
If you are upgrading your Rails application from an older version of Rails:
Please check your Rails app for 'config.i18n.fallbacks = true'.
If you're using I18n (>= 1.1.0) and Rails (< 5.2.2), this should be
'config.i18n.fallbacks = [I18n.default_locale]'.
If not, fallbacks will be broken in your app by I18n 1.1.x.
If you are starting a NEW Rails application, you can ignore this notice.
For more info see:
https://github.com/svenfuchs/i18n/releases/tag/v1.1.0
Successfully installed i18n-1.8.5
Successfully installed thread_safe-0.3.6
Successfully installed tzinfo-1.2.7
Successfully installed zeitwerk-2.4.0
Successfully installed activesupport-6.0.3.4
Successfully installed rack-2.2.3
Successfully installed rack-test-1.1.0
Successfully installed mini_portile2-2.4.0
Building native extensions. This could take a while...
Successfully installed nokogiri-1.10.10
Successfully installed crass-1.0.6
Successfully installed loofah-2.7.0
Successfully installed rails-html-sanitizer-1.3.0
Successfully installed rails-dom-testing-2.0.3
Successfully installed builder-3.2.4
Successfully installed erubi-1.9.0
Successfully installed actionview-6.0.3.4
Successfully installed actionpack-6.0.3.4
Successfully installed activemodel-6.0.3.4
Successfully installed activerecord-6.0.3.4
Successfully installed globalid-0.4.2
Successfully installed activejob-6.0.3.4
Successfully installed mini_mime-1.0.2
Successfully installed mail-2.7.1
Successfully installed actionmailer-6.0.3.4
Building native extensions. This could take a while...
Successfully installed nio4r-2.5.4
Successfully installed websocket-extensions-0.1.5
Building native extensions. This could take a while...
Successfully installed websocket-driver-0.7.3
Successfully installed actioncable-6.0.3.4
Successfully installed mimemagic-0.3.5
Successfully installed marcel-0.3.3
Successfully installed activestorage-6.0.3.4
Successfully installed actionmailbox-6.0.3.4
Successfully installed actiontext-6.0.3.4
Successfully installed thor-1.0.1
Successfully installed method_source-1.0.0
Successfully installed railties-6.0.3.4
Successfully installed sprockets-4.0.2
Successfully installed sprockets-rails-3.2.2
Successfully installed rails-6.0.3.4
Parsing documentation for concurrent-ruby-1.1.7
Installing ri documentation for concurrent-ruby-1.1.7
Parsing documentation for i18n-1.8.5
Installing ri documentation for i18n-1.8.5
Parsing documentation for thread_safe-0.3.6
Installing ri documentation for thread_safe-0.3.6
Parsing documentation for tzinfo-1.2.7
Installing ri documentation for tzinfo-1.2.7
Parsing documentation for zeitwerk-2.4.0
Installing ri documentation for zeitwerk-2.4.0
Parsing documentation for activesupport-6.0.3.4
Installing ri documentation for activesupport-6.0.3.4
Parsing documentation for rack-2.2.3
Installing ri documentation for rack-2.2.3
Parsing documentation for rack-test-1.1.0
Installing ri documentation for rack-test-1.1.0
Parsing documentation for mini_portile2-2.4.0
Installing ri documentation for mini_portile2-2.4.0
Parsing documentation for nokogiri-1.10.10
Installing ri documentation for nokogiri-1.10.10
Parsing documentation for crass-1.0.6
Installing ri documentation for crass-1.0.6
Parsing documentation for loofah-2.7.0
Installing ri documentation for loofah-2.7.0
Parsing documentation for rails-html-sanitizer-1.3.0
Installing ri documentation for rails-html-sanitizer-1.3.0
Parsing documentation for rails-dom-testing-2.0.3
Installing ri documentation for rails-dom-testing-2.0.3
Parsing documentation for builder-3.2.4
Installing ri documentation for builder-3.2.4
Parsing documentation for erubi-1.9.0
Installing ri documentation for erubi-1.9.0
Parsing documentation for actionview-6.0.3.4
Installing ri documentation for actionview-6.0.3.4
Parsing documentation for actionpack-6.0.3.4
Installing ri documentation for actionpack-6.0.3.4
Parsing documentation for activemodel-6.0.3.4
Installing ri documentation for activemodel-6.0.3.4
Parsing documentation for activerecord-6.0.3.4
Installing ri documentation for activerecord-6.0.3.4
Parsing documentation for globalid-0.4.2
Installing ri documentation for globalid-0.4.2
Parsing documentation for activejob-6.0.3.4
Installing ri documentation for activejob-6.0.3.4
Parsing documentation for mini_mime-1.0.2
Installing ri documentation for mini_mime-1.0.2
Parsing documentation for mail-2.7.1
Installing ri documentation for mail-2.7.1
Parsing documentation for actionmailer-6.0.3.4
Installing ri documentation for actionmailer-6.0.3.4
Parsing documentation for nio4r-2.5.4
Installing ri documentation for nio4r-2.5.4
Parsing documentation for websocket-extensions-0.1.5
Installing ri documentation for websocket-extensions-0.1.5
Parsing documentation for websocket-driver-0.7.3
Installing ri documentation for websocket-driver-0.7.3
Parsing documentation for actioncable-6.0.3.4
Installing ri documentation for actioncable-6.0.3.4
Parsing documentation for mimemagic-0.3.5
Installing ri documentation for mimemagic-0.3.5
Parsing documentation for marcel-0.3.3
Installing ri documentation for marcel-0.3.3
Parsing documentation for activestorage-6.0.3.4
Installing ri documentation for activestorage-6.0.3.4
Parsing documentation for actionmailbox-6.0.3.4
Installing ri documentation for actionmailbox-6.0.3.4
Parsing documentation for actiontext-6.0.3.4
Installing ri documentation for actiontext-6.0.3.4
Parsing documentation for thor-1.0.1
Installing ri documentation for thor-1.0.1
Parsing documentation for method_source-1.0.0
Installing ri documentation for method_source-1.0.0
Parsing documentation for railties-6.0.3.4
Installing ri documentation for railties-6.0.3.4
Parsing documentation for sprockets-4.0.2
Installing ri documentation for sprockets-4.0.2
Parsing documentation for sprockets-rails-3.2.2
Installing ri documentation for sprockets-rails-3.2.2
Parsing documentation for rails-6.0.3.4
Installing ri documentation for rails-6.0.3.4
Done installing documentation for concurrent-ruby, i18n, thread_safe, tzinfo, zeitwerk, activesupport, rack, rack-test, mini_portile2, nokogiri, crass, loofah, rails-html-sanitizer, rails-dom-testing, builder, erubi, actionview, actionpack, activemodel, activerecord, globalid, activejob, mini_mime, mail, actionmailer, nio4r, websocket-extensions, websocket-driver, actioncable, mimemagic, marcel, activestorage, actionmailbox, actiontext, thor, method_source, railties, sprockets, sprockets-rails, rails after 173 seconds
40 gems installed
* To start using RVM you need to run `source /home/pi/.rvm/scripts/rvm`
in all your open shell windows, in rare cases you need to reopen all shell windows.
* To start using rails you need to run `rails new `.
Third and finally, we need to run a script so the system knows how to find Ruby and Rails:
pi@raspberrypi:~ $ echo 'source /home/pi/.rvm/scripts/rvm' >> ~/.bashrc
This particular command does not return any output.
At this point, Ruby and Rails are installed and available. You can double check like this:
pi@raspberrypi:~ $ ruby -v
ruby 2.7.0p0 (2019-12-25 revision 647ee6f091) [armv7l-linux-eabihf]
pi@raspberrypi:~ $ rails -v
Rails 6.0.3.4
The final setup step is installing Yarn directly from the official instructions.
First, we grab the key for Yarn:
pi@raspberrypi:~ $ curl -sS https://dl.yarnpkg.com/debian/pubkey.gpg | sudo apt-key add -
This command will return OK
.
Second, we add Yarn to apt
:
pi@raspberrypi:~ $ echo "deb https://dl.yarnpkg.com/debian/ stable main" | sudo tee /etc/apt/sources.list.d/yarn.list
This command will not return any response.
Third and finally, we use apt
to update and install:
pi@raspberrypi:~ $ sudo apt update && sudo apt install yarn
Note: this command runs two commands in one line. As you get better at Linux, you'll learn many more shortcuts and tricks like this.
pi@raspberrypi:~ $ sudo apt update && sudo apt install yarnGet:1 https://dl.yarnpkg.com/debian stable InRelease [17.1 kB]
Get:2 https://dl.yarnpkg.com/debian stable/main all Packages [10.1 kB]
Get:3 https://dl.yarnpkg.com/debian stable/main armhf Packages [10.1 kB]
Hit:4 http://archive.raspberrypi.org/debian buster InRelease
Hit:5 http://raspbian.raspberrypi.org/raspbian buster InRelease
Fetched 37.2 kB in 11s (3,294 B s)
Reading package lists... Done
Building dependency tree
Reading state information... Done
All packages are up to date.
Reading package lists... Done
Building dependency tree
Reading state information... Done
The following NEW packages will be installed:
yarn
0 upgraded, 1 newly installed, 0 to remove and 0 not upgraded.
Need to get 891 kB of archives.
After this operation, 5,407 kB of additional disk space will be used.
Get:1 https://dl.yarnpkg.com/debian stable/main armhf yarn all 1.22.5-1 [891 kB]
Fetched 891 kB in 6s (142 kB/s)
Selecting previously unselected package yarn.
(Reading database ... 97002 files and directories currently installed.)
Preparing to unpack .../archives/yarn_1.22.5-1_all.deb ...
Unpacking yarn (1.22.5-1) ...
Setting up yarn (1.22.5-1) ...
The final step is to create a new Rails app and make sure everything works.
First, we'll change our working directory to the desktop and create a Rails app called test_app
with the rails new
command:
pi@raspberrypi:~ $ cd ~/Desktop
pi@raspberrypi:~ $ rails new test_app
This command will take a while to run and will generate a long, scrolling output. This is because Rails automatically installs all of the required dependencies.
pi@raspberrypi:~ $ sudo apt update
pi@raspberrypi:~/Desktop $ rails new test_app
create
create README.md
create Rakefile
create .ruby-version
create config.ru
create .gitignore
create Gemfile
run git init from "."
Initialized empty Git repository in /home/pi/Desktop/test_app/.git/
create package.json
create app
create app/assets/config/manifest.js
create app/assets/stylesheets/application.css
create app/channels/application_cable/channel.rb
create app/channels/application_cable/connection.rb
create app/controllers/application_controller.rb
create app/helpers/application_helper.rb
create app/javascript/channels/consumer.js
create app/javascript/channels/index.js
create app/javascript/packs/application.js
create app/jobs/application_job.rb
create app/mailers/application_mailer.rb
create app/models/application_record.rb
create app/views/layouts/application.html.erb
create app/views/layouts/mailer.html.erb
create app/views/layouts/mailer.text.erb
create app/assets/images
create app/assets/images/.keep
create app/controllers/concerns/.keep
create app/models/concerns/.keep
create bin
create bin/rails
create bin/rake
create bin/setup
create bin/yarn
create config
create config/routes.rb
create config/application.rb
create config/environment.rb
create config/cable.yml
create config/puma.rb
create config/spring.rb
create config/storage.yml
create config/environments
create config/environments/development.rb
create config/environments/production.rb
create config/environments/test.rb
create config/initializers
create config/initializers/application_controller_renderer.rb
create config/initializers/assets.rb
create config/initializers/backtrace_silencers.rb
create config/initializers/content_security_policy.rb
create config/initializers/cookies_serializer.rb
create config/initializers/cors.rb
create config/initializers/filter_parameter_logging.rb
create config/initializers/inflections.rb
create config/initializers/mime_types.rb
create config/initializers/new_framework_defaults_6_0.rb
create config/initializers/wrap_parameters.rb
create config/locales
create config/locales/en.yml
create config/master.key
append .gitignore
create config/boot.rb
create config/database.yml
create db
create db/seeds.rb
create lib
create lib/tasks
create lib/tasks/.keep
create lib/assets
create lib/assets/.keep
create log
create log/.keep
create public
create public/404.html
create public/422.html
create public/500.html
create public/apple-touch-icon-precomposed.png
create public/apple-touch-icon.png
create public/favicon.ico
create public/robots.txt
create tmp
create tmp/.keep
create tmp/pids
create tmp/pids/.keep
create tmp/cache
create tmp/cache/assets
create vendor
create vendor/.keep
create test/fixtures
create test/fixtures/.keep
create test/fixtures/files
create test/fixtures/files/.keep
create test/controllers
create test/controllers/.keep
create test/mailers
create test/mailers/.keep
create test/models
create test/models/.keep
create test/helpers
create test/helpers/.keep
create test/integration
create test/integration/.keep
create test/channels/application_cable/connection_test.rb
create test/test_helper.rb
create test/system
create test/system/.keep
create test/application_system_test_case.rb
create storage
create storage/.keep
create tmp/storage
create tmp/storage/.keep
remove config/initializers/cors.rb
remove config/initializers/new_framework_defaults_6_0.rb
run bundle install
The dependency tzinfo-data (>= 0) will be unused by any of the platforms Bundler is installing for. Bundler is installing for ruby but the dependency is only for x86-mingw32, x86-mswin32, x64-mingw32, java. To add those platforms to the bundle, run `bundle lock --add-platform x86-mingw32 x86-mswin32 x64-mingw32 java`.
Fetching gem metadata from https://rubygems.org/............
Fetching gem metadata from https://rubygems.org/.
Resolving dependencies...........
Using rake 13.0.1
Using concurrent-ruby 1.1.7
Using i18n 1.8.5
Using minitest 5.14.2
Using thread_safe 0.3.6
Using tzinfo 1.2.7
Using zeitwerk 2.4.0
Using activesupport 6.0.3.4
Using builder 3.2.4
Using erubi 1.9.0
Using mini_portile2 2.4.0
Using nokogiri 1.10.10
Using rails-dom-testing 2.0.3
Using crass 1.0.6
Using loofah 2.7.0
Using rails-html-sanitizer 1.3.0
Using actionview 6.0.3.4
Using rack 2.2.3
Using rack-test 1.1.0
Using actionpack 6.0.3.4
Using nio4r 2.5.4
Using websocket-extensions 0.1.5
Using websocket-driver 0.7.3
Using actioncable 6.0.3.4
Using globalid 0.4.2
Using activejob 6.0.3.4
Using activemodel 6.0.3.4
Using activerecord 6.0.3.4
Using mimemagic 0.3.5
Using marcel 0.3.3
Using activestorage 6.0.3.4
Using mini_mime 1.0.2
Using mail 2.7.1
Using actionmailbox 6.0.3.4
Using actionmailer 6.0.3.4
Using actiontext 6.0.3.4
Using public_suffix 4.0.6
Using addressable 2.7.0
Using bindex 0.8.1
Using msgpack 1.3.3
Using bootsnap 1.4.8
Using bundler 2.1.2
Using byebug 11.1.3
Using regexp_parser 1.8.2
Using xpath 3.2.0
Using capybara 3.33.0
Using childprocess 3.0.0
Using ffi 1.13.1
Using jbuilder 2.10.1
Using rb-fsevent 0.10.4
Using rb-inotify 0.10.1
Using listen 3.2.1
Using method_source 1.0.0
Using puma 4.3.6
Using rack-proxy 0.6.5
Using thor 1.0.1
Using railties 6.0.3.4
Using sprockets 4.0.2
Using sprockets-rails 3.2.2
Using rails 6.0.3.4
Using rubyzip 2.3.0
Using sassc 2.4.0
Using tilt 2.0.10
Using sassc-rails 2.1.2
Using sass-rails 6.0.0
Using selenium-webdriver 3.142.7
Using spring 2.1.1
Using spring-watcher-listen 2.0.1
Using sqlite3 1.4.2
Using turbolinks-source 5.2.0
Using turbolinks 5.2.1
Using web-console 4.0.4
Using webdrivers 4.4.1
Using webpacker 4.3.0
Bundle complete! 17 Gemfile dependencies, 74 gems now installed.
Use `bundle info [gemname]` to see where a bundled gem is installed.
run bundle binstubs bundler
The dependency tzinfo-data (>= 0) will be unused by any of the platforms Bundler is installing for. Bundler is installing for ruby but the dependency is only for x86-mingw32, x86-mswin32, x64-mingw32, java. To add those platforms to the bundle, run `bundle lock --add-platform x86-mingw32 x86-mswin32 x64-mingw32 java`.
run bundle exec spring binstub --all
* bin/rake: Spring inserted
* bin/rails: Spring inserted
rails webpacker:install
The dependency tzinfo-data (>= 0) will be unused by any of the platforms Bundler is installing for. Bundler is installing for ruby but the dependency is only for x86-mingw32, x86-mswin32, x64-mingw32, java. To add those platforms to the bundle, run `bundle lock --add-platform x86-mingw32 x86-mswin32 x64-mingw32 java`.
create config/webpacker.yml
Copying webpack core config
create config/webpack
create config/webpack/development.js
create config/webpack/environment.js
create config/webpack/production.js
create config/webpack/test.js
Copying postcss.config.js to app root directory
create postcss.config.js
Copying babel.config.js to app root directory
create babel.config.js
Copying .browserslistrc to app root directory
create .browserslistrc
The JavaScript app source directory already exists
apply /home/pi/.rvm/gems/ruby-2.7.0/gems/webpacker-4.3.0/lib/install/binstubs.rb
Copying binstubs
exist bin
create bin/webpack
create bin/webpack-dev-server
append .gitignore
Installing all JavaScript dependencies [4.3.0]
run yarn add @rails/webpacker@4.3.0 from "."
yarn add v1.22.5
info No lockfile found.
[1/4] Resolving packages...
warning @rails/webpacker > node-sass > request@2.88.2: request has been deprecated, see https://github.com/request/request/issues/3142
warning @rails/webpacker > node-sass > node-gyp > request@2.88.2: request has been deprecated, see https://github.com/request/request/issues/3142
warning @rails/webpacker > node-sass > request > har-validator@5.1.5: this library is no longer supported
warning @rails/webpacker > webpack > watchpack > watchpack-chokidar2 > chokidar@2.1.8: Chokidar 2 will break on node v14+. Upgrade to chokidar 3 with 15x less dependencies.
warning @rails/webpacker > webpack > watchpack > watchpack-chokidar2 > chokidar > fsevents@1.2.13: fsevents 1 will break on node v14+ and could be using insecure binaries. Upgrade to fsevents 2.
warning @rails/webpacker > webpack > micromatch > snapdragon > source-map-resolve > resolve-url@0.2.1: https://github.com/lydell/resolve-url#deprecated
warning @rails/webpacker > webpack > micromatch > snapdragon > source-map-resolve > urix@0.1.0: Please see https://github.com/lydell/urix#deprecated
[2/4] Fetching packages...
info fsevents@2.1.3: The platform "linux" is incompatible with this module.
info "fsevents@2.1.3" is an optional dependency and failed compatibility check. Excluding it from installation.
info fsevents@1.2.13: The platform "linux" is incompatible with this module.
info "fsevents@1.2.13" is an optional dependency and failed compatibility check. Excluding it from installation.
[3/4] Linking dependencies...
[4/4] Building fresh packages...
success Saved lockfile.
success Saved 593 new dependencies.
info Direct dependencies
├─ @rails/actioncable@6.0.3
├─ @rails/activestorage@6.0.3
├─ @rails/ujs@6.0.3
├─ @rails/webpacker@4.3.0
└─ turbolinks@5.2.0
info All dependencies
├─ @babel/code-frame@7.10.4
├─ @babel/core@7.12.3
├─ @babel/helper-builder-binary-assignment-operator-visitor@7.10.4
├─ @babel/helper-compilation-targets@7.12.1
├─ @babel/helper-define-map@7.10.5
├─ @babel/helper-explode-assignable-expression@7.12.1
├─ @babel/helper-get-function-arity@7.10.4
├─ @babel/helper-hoist-variables@7.10.4
├─ @babel/helper-plugin-utils@7.10.4
├─ @babel/helper-wrap-function@7.12.3
├─ @babel/helpers@7.12.1
├─ @babel/highlight@7.10.4
├─ @babel/parser@7.12.3
├─ @babel/plugin-proposal-async-generator-functions@7.12.1
├─ @babel/plugin-proposal-class-properties@7.12.1
├─ @babel/plugin-proposal-dynamic-import@7.12.1
├─ @babel/plugin-proposal-export-namespace-from@7.12.1
├─ @babel/plugin-proposal-json-strings@7.12.1
├─ @babel/plugin-proposal-logical-assignment-operators@7.12.1
├─ @babel/plugin-proposal-nullish-coalescing-operator@7.12.1
├─ @babel/plugin-proposal-numeric-separator@7.12.1
├─ @babel/plugin-proposal-object-rest-spread@7.12.1
├─ @babel/plugin-proposal-optional-catch-binding@7.12.1
├─ @babel/plugin-proposal-optional-chaining@7.12.1
├─ @babel/plugin-proposal-private-methods@7.12.1
├─ @babel/plugin-proposal-unicode-property-regex@7.12.1
├─ @babel/plugin-syntax-class-properties@7.12.1
├─ @babel/plugin-syntax-top-level-await@7.12.1
├─ @babel/plugin-transform-arrow-functions@7.12.1
├─ @babel/plugin-transform-async-to-generator@7.12.1
├─ @babel/plugin-transform-block-scoped-functions@7.12.1
├─ @babel/plugin-transform-block-scoping@7.12.1
├─ @babel/plugin-transform-classes@7.12.1
├─ @babel/plugin-transform-computed-properties@7.12.1
├─ @babel/plugin-transform-destructuring@7.12.1
├─ @babel/plugin-transform-dotall-regex@7.12.1
├─ @babel/plugin-transform-duplicate-keys@7.12.1
├─ @babel/plugin-transform-exponentiation-operator@7.12.1
├─ @babel/plugin-transform-for-of@7.12.1
├─ @babel/plugin-transform-function-name@7.12.1
├─ @babel/plugin-transform-literals@7.12.1
├─ @babel/plugin-transform-member-expression-literals@7.12.1
├─ @babel/plugin-transform-modules-amd@7.12.1
├─ @babel/plugin-transform-modules-commonjs@7.12.1
├─ @babel/plugin-transform-modules-systemjs@7.12.1
├─ @babel/plugin-transform-modules-umd@7.12.1
├─ @babel/plugin-transform-named-capturing-groups-regex@7.12.1
├─ @babel/plugin-transform-new-target@7.12.1
├─ @babel/plugin-transform-object-super@7.12.1
├─ @babel/plugin-transform-property-literals@7.12.1
├─ @babel/plugin-transform-regenerator@7.12.1
├─ @babel/plugin-transform-reserved-words@7.12.1
├─ @babel/plugin-transform-runtime@7.12.1
├─ @babel/plugin-transform-shorthand-properties@7.12.1
├─ @babel/plugin-transform-spread@7.12.1
├─ @babel/plugin-transform-sticky-regex@7.12.1
├─ @babel/plugin-transform-template-literals@7.12.1
├─ @babel/plugin-transform-typeof-symbol@7.12.1
├─ @babel/plugin-transform-unicode-escapes@7.12.1
├─ @babel/plugin-transform-unicode-regex@7.12.1
├─ @babel/preset-env@7.12.1
├─ @babel/preset-modules@0.1.4
├─ @babel/runtime@7.12.1
├─ @babel/traverse@7.12.1
├─ @npmcli/move-file@1.0.1
├─ @rails/actioncable@6.0.3
├─ @rails/activestorage@6.0.3
├─ @rails/ujs@6.0.3
├─ @rails/webpacker@4.3.0
├─ @types/json-schema@7.0.6
├─ @types/parse-json@4.0.0
├─ @types/q@1.5.4
├─ @webassemblyjs/floating-point-hex-parser@1.9.0
├─ @webassemblyjs/helper-code-frame@1.9.0
├─ @webassemblyjs/helper-fsm@1.9.0
├─ @webassemblyjs/helper-wasm-section@1.9.0
├─ @webassemblyjs/wasm-edit@1.9.0
├─ @webassemblyjs/wasm-opt@1.9.0
├─ @xtuc/ieee754@1.2.0
├─ abbrev@1.1.1
├─ acorn@6.4.2
├─ ajv-errors@1.0.1
├─ ajv-keywords@3.5.2
├─ ajv@6.12.6
├─ amdefine@1.0.1
├─ ansi-styles@3.2.1
├─ anymatch@3.1.1
├─ are-we-there-yet@1.1.5
├─ argparse@1.0.10
├─ arr-flatten@1.1.0
├─ array-find-index@1.0.2
├─ asn1.js@5.4.1
├─ asn1@0.2.4
├─ assert@1.5.0
├─ assign-symbols@1.0.0
├─ async-each@1.0.3
├─ async-foreach@0.1.3
├─ asynckit@0.4.0
├─ atob@2.1.2
├─ autoprefixer@9.8.6
├─ aws-sign2@0.7.0
├─ aws4@1.10.1
├─ babel-loader@8.1.0
├─ babel-plugin-macros@2.8.0
├─ base@0.11.2
├─ base64-js@1.3.1
├─ bcrypt-pbkdf@1.0.2
├─ binary-extensions@2.1.0
├─ block-stream@0.0.9
├─ bluebird@3.7.2
├─ boolbase@1.0.0
├─ brace-expansion@1.1.11
├─ braces@2.3.2
├─ browserify-aes@1.2.0
├─ browserify-cipher@1.0.1
├─ browserify-des@1.0.2
├─ browserify-rsa@4.0.1
├─ browserify-sign@4.2.1
├─ browserify-zlib@0.2.0
├─ buffer-xor@1.0.3
├─ buffer@4.9.2
├─ builtin-status-codes@3.0.0
├─ cacache@13.0.1
├─ cache-base@1.0.1
├─ caller-callsite@2.0.0
├─ caller-path@2.0.0
├─ callsites@2.0.0
├─ camelcase-keys@2.1.0
├─ camelcase@5.3.1
├─ caniuse-lite@1.0.30001150
├─ case-sensitive-paths-webpack-plugin@2.3.0
├─ caseless@0.12.0
├─ chokidar@3.4.3
├─ chownr@1.1.4
├─ chrome-trace-event@1.0.2
├─ cipher-base@1.0.4
├─ class-utils@0.3.6
├─ clean-stack@2.2.0
├─ cliui@5.0.0
├─ clone-deep@4.0.1
├─ coa@2.0.2
├─ code-point-at@1.1.0
├─ collection-visit@1.0.0
├─ color-convert@1.9.3
├─ color-name@1.1.3
├─ color-string@1.5.4
├─ color@3.1.3
├─ colorette@1.2.1
├─ combined-stream@1.0.8
├─ commander@2.20.3
├─ compression-webpack-plugin@4.0.1
├─ concat-map@0.0.1
├─ concat-stream@1.6.2
├─ console-browserify@1.2.0
├─ console-control-strings@1.1.0
├─ constants-browserify@1.0.0
├─ convert-source-map@1.7.0
├─ copy-concurrently@1.0.5
├─ copy-descriptor@0.1.1
├─ core-js-compat@3.6.5
├─ core-js@3.6.5
├─ core-util-is@1.0.2
├─ create-ecdh@4.0.4
├─ create-hmac@1.1.7
├─ cross-spawn@3.0.1
├─ crypto-browserify@3.12.0
├─ css-blank-pseudo@0.1.4
├─ css-color-names@0.0.4
├─ css-declaration-sorter@4.0.1
├─ css-has-pseudo@0.10.0
├─ css-loader@3.6.0
├─ css-prefers-color-scheme@3.1.1
├─ css-select-base-adapter@0.1.1
├─ css-select@2.1.0
├─ css-tree@1.0.0-alpha.37
├─ css-what@3.4.2
├─ cssdb@4.4.0
├─ cssnano-preset-default@4.0.7
├─ cssnano-util-raw-cache@4.0.1
├─ cssnano-util-same-parent@4.0.1
├─ cssnano@4.1.10
├─ csso@4.0.3
├─ currently-unhandled@0.4.1
├─ cyclist@1.0.1
├─ dashdash@1.14.1
├─ debug@2.6.9
├─ decamelize@1.2.0
├─ decode-uri-component@0.2.0
├─ delayed-stream@1.0.0
├─ delegates@1.0.0
├─ des.js@1.0.1
├─ detect-file@1.0.0
├─ diffie-hellman@5.0.3
├─ dom-serializer@0.2.2
├─ domain-browser@1.2.0
├─ domelementtype@1.3.1
├─ domutils@1.7.0
├─ dot-prop@5.3.0
├─ duplexify@3.7.1
├─ ecc-jsbn@0.1.2
├─ electron-to-chromium@1.3.582
├─ emoji-regex@7.0.3
├─ enhanced-resolve@4.3.0
├─ entities@2.1.0
├─ errno@0.1.7
├─ error-ex@1.3.2
├─ escalade@3.1.1
├─ escape-string-regexp@1.0.5
├─ eslint-scope@4.0.3
├─ esprima@4.0.1
├─ esrecurse@4.3.0
├─ estraverse@4.3.0
├─ esutils@2.0.3
├─ events@3.2.0
├─ expand-brackets@2.1.4
├─ expand-tilde@2.0.2
├─ extend@3.0.2
├─ extglob@2.0.4
├─ extsprintf@1.3.0
├─ fast-deep-equal@3.1.3
├─ fast-json-stable-stringify@2.1.0
├─ file-loader@4.3.0
├─ fill-range@4.0.0
├─ findup-sync@3.0.0
├─ flatted@2.0.2
├─ flatten@1.0.3
├─ flush-write-stream@1.1.1
├─ for-in@1.0.2
├─ forever-agent@0.6.1
├─ form-data@2.3.3
├─ from2@2.3.0
├─ fs.realpath@1.0.0
├─ fstream@1.0.12
├─ gauge@2.7.4
├─ gaze@1.1.3
├─ gensync@1.0.0-beta.1
├─ get-caller-file@2.0.5
├─ get-value@2.0.6
├─ getpass@0.1.7
├─ glob-parent@5.1.1
├─ glob@7.1.6
├─ global-modules@2.0.0
├─ global-prefix@3.0.0
├─ globule@1.3.2
├─ har-schema@2.0.0
├─ har-validator@5.1.5
├─ has-ansi@2.0.0
├─ has-unicode@2.0.1
├─ has-value@1.0.0
├─ hash.js@1.1.7
├─ hex-color-regex@1.1.0
├─ hmac-drbg@1.0.1
├─ hosted-git-info@2.8.8
├─ hsl-regex@1.0.0
├─ hsla-regex@1.0.0
├─ html-comment-regex@1.1.2
├─ http-signature@1.2.0
├─ https-browserify@1.0.0
├─ icss-utils@4.1.1
├─ ieee754@1.1.13
├─ import-cwd@2.1.0
├─ import-fresh@2.0.0
├─ import-from@2.1.0
├─ import-local@2.0.0
├─ in-publish@2.0.1
├─ indent-string@2.1.0
├─ infer-owner@1.0.4
├─ inflight@1.0.6
├─ ini@1.3.5
├─ interpret@1.4.0
├─ is-absolute-url@2.1.0
├─ is-accessor-descriptor@1.0.0
├─ is-arrayish@0.2.1
├─ is-binary-path@2.1.0
├─ is-color-stop@1.1.0
├─ is-core-module@2.0.0
├─ is-data-descriptor@1.0.0
├─ is-date-object@1.0.2
├─ is-descriptor@1.0.2
├─ is-directory@0.3.1
├─ is-extglob@2.1.1
├─ is-finite@1.1.0
├─ is-glob@4.0.1
├─ is-negative-zero@2.0.0
├─ is-obj@2.0.0
├─ is-plain-obj@1.1.0
├─ is-plain-object@2.0.4
├─ is-resolvable@1.1.0
├─ is-svg@3.0.0
├─ is-symbol@1.0.3
├─ is-typedarray@1.0.0
├─ is-utf8@0.2.1
├─ is-windows@1.0.2
├─ is-wsl@1.1.0
├─ isarray@1.0.0
├─ isexe@2.0.0
├─ isstream@0.1.2
├─ jest-worker@25.5.0
├─ js-base64@2.6.4
├─ js-tokens@4.0.0
├─ jsesc@2.5.2
├─ json-parse-better-errors@1.0.2
├─ json-parse-even-better-errors@2.3.1
├─ json-schema-traverse@0.4.1
├─ json-schema@0.2.3
├─ json-stringify-safe@5.0.1
├─ jsprim@1.4.1
├─ last-call-webpack-plugin@3.0.0
├─ lines-and-columns@1.1.6
├─ load-json-file@1.1.0
├─ loader-runner@2.4.0
├─ locate-path@3.0.0
├─ lodash.get@4.4.2
├─ lodash.has@4.5.2
├─ lodash.memoize@4.1.2
├─ lodash.template@4.5.0
├─ lodash.templatesettings@4.2.0
├─ lodash.uniq@4.5.0
├─ lodash@4.17.20
├─ loud-rejection@1.6.0
├─ make-dir@2.1.0
├─ map-obj@1.0.1
├─ map-visit@1.0.0
├─ mdn-data@2.0.4
├─ memory-fs@0.4.1
├─ meow@3.7.0
├─ merge-stream@2.0.0
├─ micromatch@3.1.10
├─ miller-rabin@4.0.1
├─ mime-db@1.44.0
├─ mime-types@2.1.27
├─ mini-css-extract-plugin@0.8.2
├─ minimalistic-crypto-utils@1.0.1
├─ minimatch@3.0.4
├─ minimist@1.2.5
├─ minizlib@2.1.2
├─ mississippi@3.0.0
├─ mixin-deep@1.3.2
├─ mkdirp@0.5.5
├─ ms@2.0.0
├─ nan@2.14.2
├─ nanomatch@1.2.13
├─ nice-try@1.0.5
├─ node-gyp@3.8.0
├─ node-libs-browser@2.2.1
├─ node-releases@1.1.64
├─ node-sass@4.14.1
├─ nopt@3.0.6
├─ normalize-package-data@2.5.0
├─ normalize-range@0.1.2
├─ normalize-url@1.9.1
├─ npmlog@4.1.2
├─ nth-check@1.0.2
├─ num2fraction@1.2.2
├─ number-is-nan@1.0.1
├─ oauth-sign@0.9.0
├─ object-assign@4.1.1
├─ object-copy@0.1.0
├─ object.getownpropertydescriptors@2.1.0
├─ object.values@1.1.1
├─ optimize-css-assets-webpack-plugin@5.0.4
├─ os-browserify@0.3.0
├─ os-homedir@1.0.2
├─ os-tmpdir@1.0.2
├─ osenv@0.1.5
├─ p-limit@2.3.0
├─ p-locate@3.0.0
├─ p-map@3.0.0
├─ p-try@2.2.0
├─ pako@1.0.11
├─ parallel-transform@1.2.0
├─ parent-module@1.0.1
├─ parse-asn1@5.1.6
├─ parse-json@4.0.0
├─ parse-passwd@1.0.0
├─ pascalcase@0.1.1
├─ path-browserify@0.0.1
├─ path-complete-extname@1.0.0
├─ path-dirname@1.0.2
├─ path-exists@3.0.0
├─ path-is-absolute@1.0.1
├─ path-key@2.0.1
├─ path-parse@1.0.6
├─ path-type@4.0.0
├─ performance-now@2.1.0
├─ picomatch@2.2.2
├─ pinkie@2.0.4
├─ pnp-webpack-plugin@1.6.4
├─ posix-character-classes@0.1.1
├─ postcss-attribute-case-insensitive@4.0.2
├─ postcss-calc@7.0.5
├─ postcss-color-functional-notation@2.0.1
├─ postcss-color-gray@5.0.0
├─ postcss-color-hex-alpha@5.0.3
├─ postcss-color-mod-function@3.0.3
├─ postcss-color-rebeccapurple@4.0.1
├─ postcss-colormin@4.0.3
├─ postcss-convert-values@4.0.1
├─ postcss-custom-media@7.0.8
├─ postcss-custom-properties@8.0.11
├─ postcss-custom-selectors@5.1.2
├─ postcss-dir-pseudo-class@5.0.0
├─ postcss-discard-comments@4.0.2
├─ postcss-discard-duplicates@4.0.2
├─ postcss-discard-empty@4.0.1
├─ postcss-discard-overridden@4.0.1
├─ postcss-double-position-gradients@1.0.0
├─ postcss-env-function@2.0.2
├─ postcss-flexbugs-fixes@4.2.1
├─ postcss-focus-visible@4.0.0
├─ postcss-focus-within@3.0.0
├─ postcss-font-variant@4.0.0
├─ postcss-gap-properties@2.0.0
├─ postcss-image-set-function@3.0.1
├─ postcss-import@12.0.1
├─ postcss-initial@3.0.2
├─ postcss-lab-function@2.0.1
├─ postcss-load-config@2.1.2
├─ postcss-loader@3.0.0
├─ postcss-logical@3.0.0
├─ postcss-media-minmax@4.0.0
├─ postcss-merge-longhand@4.0.11
├─ postcss-merge-rules@4.0.3
├─ postcss-minify-font-values@4.0.2
├─ postcss-minify-gradients@4.0.2
├─ postcss-minify-params@4.0.2
├─ postcss-minify-selectors@4.0.2
├─ postcss-modules-extract-imports@2.0.0
├─ postcss-modules-local-by-default@3.0.3
├─ postcss-modules-scope@2.2.0
├─ postcss-modules-values@3.0.0
├─ postcss-nesting@7.0.1
├─ postcss-normalize-charset@4.0.1
├─ postcss-normalize-display-values@4.0.2
├─ postcss-normalize-positions@4.0.2
├─ postcss-normalize-repeat-style@4.0.2
├─ postcss-normalize-string@4.0.2
├─ postcss-normalize-timing-functions@4.0.2
├─ postcss-normalize-unicode@4.0.1
├─ postcss-normalize-url@4.0.1
├─ postcss-normalize-whitespace@4.0.2
├─ postcss-ordered-values@4.1.2
├─ postcss-overflow-shorthand@2.0.0
├─ postcss-page-break@2.0.0
├─ postcss-place@4.0.1
├─ postcss-preset-env@6.7.0
├─ postcss-pseudo-class-any-link@6.0.0
├─ postcss-reduce-initial@4.0.3
├─ postcss-reduce-transforms@4.0.2
├─ postcss-replace-overflow-wrap@3.0.0
├─ postcss-safe-parser@4.0.2
├─ postcss-selector-matches@4.0.0
├─ postcss-selector-not@4.0.0
├─ postcss-svgo@4.0.2
├─ postcss-unique-selectors@4.0.1
├─ prepend-http@1.0.4
├─ process-nextick-args@2.0.1
├─ process@0.11.10
├─ prr@1.0.1
├─ pseudomap@1.0.2
├─ psl@1.8.0
├─ public-encrypt@4.0.3
├─ pump@3.0.0
├─ pumpify@1.5.1
├─ punycode@2.1.1
├─ q@1.5.1
├─ qs@6.5.2
├─ query-string@4.3.4
├─ querystring-es3@0.2.1
├─ querystring@0.2.0
├─ randomfill@1.0.4
├─ read-cache@1.0.0
├─ read-pkg-up@1.0.1
├─ read-pkg@1.1.0
├─ readable-stream@2.3.7
├─ readdirp@3.5.0
├─ redent@1.0.0
├─ regenerate-unicode-properties@8.2.0
├─ regenerator-runtime@0.13.7
├─ regenerator-transform@0.14.5
├─ regexpu-core@4.7.1
├─ regjsgen@0.5.2
├─ regjsparser@0.6.4
├─ remove-trailing-separator@1.1.0
├─ repeat-element@1.1.3
├─ repeating@2.0.1
├─ request@2.88.2
├─ require-directory@2.1.1
├─ require-main-filename@2.0.0
├─ resolve-cwd@2.0.0
├─ resolve-dir@1.0.1
├─ resolve-url@0.2.1
├─ resolve@1.18.1
├─ ret@0.1.15
├─ rgb-regex@1.0.1
├─ rgba-regex@1.0.0
├─ ripemd160@2.0.2
├─ run-queue@1.0.3
├─ sass-graph@2.2.5
├─ sass-loader@7.3.1
├─ sax@1.2.4
├─ schema-utils@2.7.1
├─ scss-tokenizer@0.2.3
├─ semver@5.7.1
├─ set-blocking@2.0.0
├─ set-value@2.0.1
├─ setimmediate@1.0.5
├─ shallow-clone@3.0.1
├─ shebang-command@1.2.0
├─ shebang-regex@1.0.0
├─ simple-swizzle@0.2.2
├─ snapdragon-node@2.1.1
├─ snapdragon-util@3.0.1
├─ sort-keys@1.1.2
├─ source-list-map@2.0.1
├─ source-map-resolve@0.5.3
├─ source-map-support@0.5.19
├─ source-map-url@0.4.0
├─ spark-md5@3.0.1
├─ spdx-correct@3.1.1
├─ spdx-exceptions@2.3.0
├─ split-string@3.1.0
├─ sprintf-js@1.0.3
├─ sshpk@1.16.1
├─ ssri@7.1.0
├─ stable@0.1.8
├─ static-extend@0.1.2
├─ stdout-stream@1.4.1
├─ stream-browserify@2.0.2
├─ stream-each@1.2.3
├─ stream-http@2.8.3
├─ strict-uri-encode@1.1.0
├─ string_decoder@1.3.0
├─ strip-bom@2.0.0
├─ strip-indent@1.0.1
├─ style-loader@1.3.0
├─ stylehacks@4.0.3
├─ svgo@1.3.2
├─ tar@2.2.2
├─ terser-webpack-plugin@2.3.8
├─ terser@4.8.0
├─ through2@2.0.5
├─ timers-browserify@2.0.11
├─ timsort@0.3.0
├─ to-arraybuffer@1.0.1
├─ to-fast-properties@2.0.0
├─ to-object-path@0.3.0
├─ to-regex-range@2.1.1
├─ tough-cookie@2.5.0
├─ trim-newlines@1.0.0
├─ true-case-path@1.0.3
├─ ts-pnp@1.2.0
├─ tslib@1.14.1
├─ tty-browserify@0.0.0
├─ tunnel-agent@0.6.0
├─ turbolinks@5.2.0
├─ tweetnacl@0.14.5
├─ typedarray@0.0.6
├─ unicode-canonical-property-names-ecmascript@1.0.4
├─ unicode-match-property-ecmascript@1.0.4
├─ unicode-match-property-value-ecmascript@1.2.0
├─ unicode-property-aliases-ecmascript@1.1.0
├─ union-value@1.0.1
├─ unique-slug@2.0.2
├─ unquote@1.1.1
├─ unset-value@1.0.0
├─ upath@1.2.0
├─ uri-js@4.4.0
├─ urix@0.1.0
├─ url@0.11.0
├─ use@3.1.1
├─ util-deprecate@1.0.2
├─ util.promisify@1.0.1
├─ util@0.11.1
├─ uuid@3.4.0
├─ v8-compile-cache@2.1.1
├─ validate-npm-package-license@3.0.4
├─ vendors@1.0.4
├─ verror@1.10.0
├─ vm-browserify@1.1.2
├─ watchpack-chokidar2@2.0.0
├─ watchpack@1.7.4
├─ webpack-assets-manifest@3.1.1
├─ webpack-cli@3.3.12
├─ webpack@4.44.2
├─ which-module@2.0.0
├─ which@1.3.1
├─ wide-align@1.1.3
├─ worker-farm@1.7.0
├─ wrap-ansi@5.1.0
├─ xtend@4.0.2
├─ yaml@1.10.0
└─ yargs-parser@13.1.2
Done in 427.99s.
Installing dev server for live reloading
run yarn add --dev webpack-dev-server from "."
yarn add v1.22.5
[1/4] Resolving packages...
[2/4] Fetching packages...
info fsevents@2.1.3: The platform "linux" is incompatible with this module.
info "fsevents@2.1.3" is an optional dependency and failed compatibility check. Excluding it from installation.
info fsevents@1.2.13: The platform "linux" is incompatible with this module.
info "fsevents@1.2.13" is an optional dependency and failed compatibility check. Excluding it from installation.
[3/4] Linking dependencies...
warning "webpack-dev-server > webpack-dev-middleware@3.7.2" has unmet peer dependency "webpack@^4.0.0".
warning " > webpack-dev-server@3.11.0" has unmet peer dependency "webpack@^4.0.0 || ^5.0.0".
[4/4] Building fresh packages...
success Saved lockfile.
success Saved 102 new dependencies.
info Direct dependencies
└─ webpack-dev-server@3.11.0
info All dependencies
├─ @types/glob@7.1.3
├─ @types/minimatch@3.0.3
├─ @types/node@14.14.2
├─ accepts@1.3.7
├─ ansi-colors@3.2.4
├─ ansi-html@0.0.7
├─ array-flatten@1.1.1
├─ array-union@1.0.2
├─ array-uniq@1.0.3
├─ async-limiter@1.0.1
├─ async@2.6.3
├─ batch@0.6.1
├─ body-parser@1.19.0
├─ bonjour@3.5.0
├─ buffer-indexof@1.1.1
├─ compressible@2.0.18
├─ compression@1.7.4
├─ connect-history-api-fallback@1.6.0
├─ content-disposition@0.5.3
├─ cookie-signature@1.0.6
├─ cookie@0.4.0
├─ deep-equal@1.1.1
├─ default-gateway@4.2.0
├─ del@4.1.1
├─ destroy@1.0.4
├─ detect-node@2.0.4
├─ dns-equal@1.0.0
├─ dns-packet@1.3.1
├─ dns-txt@2.0.2
├─ ee-first@1.1.1
├─ eventemitter3@4.0.7
├─ eventsource@1.0.7
├─ execa@1.0.0
├─ express@4.17.1
├─ faye-websocket@0.10.0
├─ finalhandler@1.1.2
├─ follow-redirects@1.13.0
├─ forwarded@0.1.2
├─ get-stream@4.1.0
├─ globby@6.1.0
├─ handle-thing@2.0.1
├─ hpack.js@2.1.6
├─ html-entities@1.3.1
├─ http-deceiver@1.2.7
├─ http-parser-js@0.5.2
├─ http-proxy-middleware@0.19.1
├─ http-proxy@1.18.1
├─ internal-ip@4.3.0
├─ ip-regex@2.1.0
├─ ip@1.1.5
├─ ipaddr.js@1.9.1
├─ is-absolute-url@3.0.3
├─ is-arguments@1.0.4
├─ is-path-cwd@2.2.0
├─ is-path-in-cwd@2.1.0
├─ is-path-inside@2.1.0
├─ is-stream@1.1.0
├─ json3@3.3.3
├─ killable@1.0.1
├─ loglevel@1.7.0
├─ media-typer@0.3.0
├─ merge-descriptors@1.0.1
├─ methods@1.1.2
├─ mime@2.4.6
├─ multicast-dns-service-types@1.1.0
├─ multicast-dns@6.2.3
├─ negotiator@0.6.2
├─ node-forge@0.10.0
├─ npm-run-path@2.0.2
├─ object-is@1.1.3
├─ obuf@1.1.2
├─ on-headers@1.0.2
├─ opn@5.5.0
├─ original@1.0.2
├─ p-finally@1.0.0
├─ p-map@2.1.0
├─ p-retry@3.0.1
├─ path-is-inside@1.0.2
├─ path-to-regexp@0.1.7
├─ portfinder@1.0.28
├─ proxy-addr@2.0.6
├─ querystringify@2.2.0
├─ raw-body@2.4.0
├─ regexp.prototype.flags@1.3.0
├─ retry@0.12.0
├─ select-hose@2.0.0
├─ selfsigned@1.10.8
├─ serve-index@1.9.1
├─ serve-static@1.14.1
├─ sockjs-client@1.4.0
├─ sockjs@0.3.20
├─ spdy-transport@3.0.0
├─ spdy@4.0.2
├─ strip-eof@1.0.0
├─ thunky@1.1.0
├─ type-is@1.6.18
├─ unpipe@1.0.0
├─ utils-merge@1.0.1
├─ wbuf@1.7.3
├─ webpack-dev-middleware@3.7.2
├─ webpack-dev-server@3.11.0
└─ ws@6.2.1
Done in 19.77s.
Webpacker successfully installed 🎉 🍰
p Step 3 is to navigate into the new testapp
directory.
Second, we'll move into the new test_app
directory and start a Rails' web server with rails server
to confirm that the app works:
pi@raspberrypi:~ $ cd test_app
pi@raspberrypi:~ $ rails server
Third and finally, we open a web browser, put localhost:3000
in the address bar, and see the Rails welcome screen:

Ruby on Rails—Welcome Screen
You just installed Rails on Pi! 💥