One place for hosting & domains

      September 2018

      How To Install Ruby on Rails with rbenv on Ubuntu 18.04


      Introduction

      Ruby on Rails is one of the most popular application stacks for developers looking to create sites and web apps. The Ruby programming language, combined with the Rails development framework, makes app development simple.

      You can easily install Ruby and Rails with the command-line tool rbenv. Using rbenv will provide you with a solid environment for developing your Ruby on Rails applications as it will let you easily switch Ruby versions, keeping your entire team on the same version.

      rbenv provides support for specifying application-specific versions of Ruby, lets you change the global Ruby for each user, and allows you to use an environment variable to override the Ruby version.

      This tutorial will take you through the Ruby and Rails installation process via rbenv.

      Prerequisites

      To follow this tutorial, you need:

      Step 1 – Install rbenv and Dependencies

      Ruby relies on several packages which you can install through your package manager. Once those are installed, you can install rbenv and use it to install Ruby,

      First, update your package list:

      Next, install the dependencies required to install Ruby:

      • sudo apt install autoconf bison build-essential libssl-dev libyaml-dev libreadline6-dev zlib1g-dev libncurses5-dev libffi-dev libgdbm5 libgdbm-dev

      Once the dependencies download, you can install rbenv itself. Clone the rbenv repository from GitHub into the directory ~/.rbenv:

      • git clone https://github.com/rbenv/rbenv.git ~/.rbenv

      Next, add ~/.rbenv/bin to your $PATH so that you can use the rbenv command line utility. Do this by altering your ~/.bashrc file so that it affects future login sessions:

      • echo 'export PATH="$HOME/.rbenv/bin:$PATH"' >> ~/.bashrc

      Then add the command ~/.rbenv/bin/rbenv init to your ~/.basrc file so rbenv loads automatically:

      • echo 'eval "$(rbenv init -)"' >> ~/.bashrc

      Next, apply the changes you made to your ~/.bashrc file to your current shell session:

      Verify that rbenv is set up properly by using the type command, which will display more information about the rbenv command:

      Your terminal window will display the following:

      Output

      rbenv is a function rbenv () { local command; command="${1:-}"; if [ "$#" -gt 0 ]; then shift; fi; case "$command" in rehash | shell) eval "$(rbenv "sh-$command" "$@")" ;; *) command rbenv "$command" "$@" ;; esac }

      Next, install the ruby-build, plugin. This plugin adds therbenv install command, which simplifies the installation process for new versions of Ruby:

      • git clone https://github.com/rbenv/ruby-build.git ~/.rbenv/plugins/ruby-build

      At this point, you have both rbenv and ruby-build installed. Let's install Ruby next.

      Step 2 – Installing Ruby with ruby-build

      With the ruby-build plugin now installed, you can install versions of Ruby y may need through a simple command. First, let's list all the available versions of Ruby:

      The output of that command should be a long list of versions that you can choose to install.

      Let's install Ruby 2.5.1:

      Installing Ruby can be a lengthy process, so be prepared for the installation to take some time to complete.

      Once it's done installing, set it asy our default version of Ruby with the global sub-command:

      Verify that Ruby was properly installed by checking its version number:

      If you installed version 2.5.1 of Ruby, your output to the above command should look something like this:

      Output

      ruby 2.5.1p57 (2018-03-29 revision 63029) [x86_64-linux]

      To install and use a different version of Ruby, run the rbenv commands with a different version number, as in rbenv install 2.3.0 and rbenv global 2.3.0.

      You now have at least one version of Ruby installed and have set your default Ruby version. Next, we will set up gems and Rails.

      Step 3 – Working with Gems

      Gems are the way Ruby libraries are distributed. You use the gem command to manage these gems. We'll use this command to install Rails.

      When you install a gem, the installation process generates local documentation. This can add a significant amount of time to each gem's installation process, so turn off local documentation generation by creating a file called ~/.gemrc which contains a configuration setting to turn off this feature:

      • echo "gem: --no-document" > ~/.gemrc

      Bundler is a tool that manages gem dependencies for projects. Install the Bundler gem next. as Rails depends on it.

      You'll see output like this:

      Output

      Fetching: bundler-1.16.2.gem (100%) Successfully installed bundler-1.16.2 1 gem installed

      You can use the gem env command (the subcommand env is short for environment) to learn more about the environment and configuration of gems. You can see where gems are being installed by using the home argument, like this:

      You'll see output similar to this:

      /home/sammy/.rbenv/versions/2.5.1/lib/ruby/gems/2.5.0
      

      Once you have gems set up, you can install Rails.

      Step 4 – Installing Rails

      To install the most recent version of Rails, use the gem install command:

      The gem command installs the gem you specify, as well as every dependency. Rails is a complex web development framework and has many dependencies, so the process will take some time to complete. Eventually you'll see a message stating that Rails is installed. along with its dependencies:

      Output

      ... Successfully installed rails-5.2.0 38 gems installed

      Note: If you would like to install a specific version of Rails, you can list the valid versions of Rails by doing a search, which will output a long list of possible versions. We can then install a specific version, such as 4.2.7:

      • gem search '^rails$' --all
      • gem install rails -v 4.2.7

      rbenv works by creating a directory of shims, which point to the files used by the Ruby version that's currently enabled. Through the rehash sub-command, rbenv maintains shims in that directory to match every Ruby command across every installed version of Ruby on your server. Whenever you install a new version of Ruby or a gem that provides commands, like Rails does, you should run:

      Verify that Rails has been installed properly by printing its version, with this command:

      If it installed properly, you will see the version of Rails that was installed:

      Output

      Rails 5.2.0

      At this point, you can begin testing your Ruby on Rails installation and start to develop web applications. Let's look at keeping rbenv up to date.

      Step 5 – Updating rbenv

      Since you installed rbenv manually using Git, you can upgrade your installation to the most recent version at any time by using the git pull command in the ~/.rbenv directory:

      This will ensure that we are using the most up-to-date version of rbenv available.

      Step 6 – Uninstalling Ruby versions

      As you download additional versions of Ruby, you may accumulate more versions than you would like in your ~/.rbenv/versions directory. Use the ruby-buildplugin 's' uninstall subcommand to remove these previous versions.

      For example, typing this will uninstall Ruby version 2.1.3:

      With the rbenv uninstall command you can clean up old versions of Ruby so that you do not have more installed than you are currently using.

      Step 7 – Uninstalling rbenv

      If you've decided you no longer want to use rbenv, you can remove it from your system.

      To do this, first open your ~/.bashrc file in your editor:

      Find and remove the following two lines from the file:

      ~/.bashrc

      ...
      export PATH="$HOME/.rbenv/bin:$PATH"
      eval "$(rbenv init -)"
      

      Save the file and exit the editor.

      Then remove rbenv and all installed Ruby versions with this command:

       rm -rf `rbenv root`
      

      Log out and back in to apply the changes to your shell.

      Conclusion

      In this tutorial you installed rbenv and Ruby on Rails. From here, you can learn more about making those environments more robust.

      Explore how to use Ruby on Rails with PostgreSQL or MySQL rather than its default sqlite3 database, which provide more scalability, centralization, and stability for your applications. As your needs grow, you can also learn how to scale Ruby on Rails applications across multiple servers.



      Source link

      How To Install Ruby on Rails with RVM on Ubuntu 18.04


      Introduction

      A popular web application framework, Ruby on Rails was designed to help you develop successful projects while writing less code. With an aim to making web development fun and supported by a robust community, Ruby on Rails is open-source software that is free to use and welcomes contributions to make it better.

      The command-line tool RVM (Ruby Version Manager) provides you with a solid development environment. RVM will let you manage and work with multiple Ruby environments and allow you to switch between them. The project repository is located in a git repository.

      This tutorial will take you through the Ruby and Rails installation process and set up via RVM

      Prerequisites

      This tutorial will take you through the Ruby on Rails installation process via RVM. To follow this tutorial, you need a non-root user with sudo privileges on an Ubuntu 18.04 server.

      To learn how to achieve this setup, follow our manual initial server setup guide or run our automated script.

      Installation

      The quickest way of installing Ruby on Rails with RVM is to run the following commands.

      We first need to update GPG, which stands for GNU Privacy Guard, to the most recent version in order to contact a public key server and request a key associated with the given ID.

      We are using a user with sudo privileges to update here, but the rest of the commands can be done by a regular user.

      Now, we’ll be requesting the RVM project’s key to sign each RVM release. Having the RVM project’s public key allows us to verify the legitimacy of the RVM release we will be downloading, which is signed with the matching private key.

      • gpg2 --keyserver hkp://keys.gnupg.net --recv-keys 409B6B1796C275462A1703113804BB82D39DC0E3 7D2BAF1CF37B13E2069D6956105BD0E739499BDB

      Let’s now move into a writable location such as the /tmp directory and then download the RVM script into a file:

      We'll use the curl command to download the RVM installation script from the project's website. The backslash that leads the command ensures that we are using the regular curl command and not any altered, aliased version.

      We will append the -s flag to indicate that the utility should operate in silent mode along with the -S flag to override some of this to allow curl to output errors if it fails. The -L flag tells the utility to follow redirects, and finally the -o flag indicates to write output to a file instead of standard output.

      Putting all of these elements together, our full command will look like this:

      • curl -sSL https://get.rvm.io -o rvm.sh

      Once it is downloaded, if you would like to audit the contents of the script before applying it, run:

      Then we can pipe it to bash to install the latest stable Rails version which will also pull in the associated latest stable release of Ruby.

      • cat /tmp/rvm.sh | bash -s stable --rails

      During the installation process, you may be prompted for your regular user’s password. When the installation is complete, source the RVM scripts from the directory they were installed, which will typically be in your home/username directory.

      • source /home/sammy/.rvm/scripts/rvm

      You should now have a full Ruby on Rails environment configured.

      Installing Specific Ruby and Rails Versions

      If you need to install a specific version of Ruby for your application, rather than just the most recent one, you can do so with RVM. First, check to see which versions of Ruby are available by listing them:

      Then, install the specific version of Ruby that you need through RVM, where ruby_version can be typed as ruby-2.4.0, for instance, or just 2.4.0:

      After the installation, we can list the available Ruby versions we have installed by typing:

      We can switch between the Ruby versions by typing:

      Since Rails is a gem, we can also install various versions of Rails by using the gem command. Let’s first list the valid versions of Rails by doing a search:

      • gem search '^rails$' --all

      Next, we can install our required version of Rails. Note that rails_version will only refer to the version number, as in 5.1.6.

      • gem install rails -v rails_version

      We can use various Rails versions with each Ruby by creating gemsets and then installing Rails within those using the normal gem commands.

      To create a gemset we will use:

      • rvm gemset create gemset_name

      To specify a Ruby version to use when creating a gemset, use:

      • rvm ruby_version@gemset_name --create

      The gemsets allow us to have self-contained environments for gems as well as have multiple environments for each version of Ruby that we install.

      Install JavaScript Runtime

      A few Rails features, such as the Asset Pipeline, depend on a JavaScript Runtime. We will install Node.js with the package manager apt to provide this functionality.

      Like we did with the RVM script, we can move to a writable directory, verify the Node.js script by outputting it to a file, then read it with less:

      • cd /tmp
      • curl -sSL https://deb.nodesource.com/setup_10.x -o nodejs.sh
      • less nodejs.sh

      Once we are satisfied with the Node.js script, we can install the NodeSource Node.js v10.x repo:

      • cat /tmp/nodejs.sh | sudo -E bash -

      The -E flag used here will preserve the user's existing environment variables.

      Now we can update apt and use it to install Node.js:

      • sudo apt update
      • sudo apt install -y nodejs

      At this point, you can begin testing your Ruby on Rails installation and start to develop web applications.

      How To Uninstall RVM

      If you no longer wish to use RVM, you can uninstall it by first removing the script calls in your .bashrc file and then removing the RVM files.

      First, remove the script calls with a text editor like nano:

      Scroll down to where you see the RVM lines of your file:

      ~/.bashrc

      ...
      # Add RVM to PATH for scripting. Make sure this is the last PATH variable change.
      export PATH="$PATH:$HOME/.rvm/bin"
      

      Delete the lines, then save and close the file.

      Next, remove RVM with the following command:

      At this point, you no longer have an

      Conclusion

      We have covered the basics of how to install RVM and Ruby on Rails here so that you can use multiple Ruby environments.

      For your next steps, you can learn more about working with RVM and how to use RVM to manage your Ruby installations.

      If you’re new to Ruby, you can learn about programming in Ruby by following our How To Code in Ruby tutorial series.

      For more scalability, centralization, and control in your Ruby on Rails application, you may want to use it with PostgreSQL or MySQL rather than its default sqlite3 database. As your needs grow, you can also learn how to scale Ruby on Rails applications across multiple servers.



      Source link

      How to Install and Configure Ansible on Ubuntu 18.04


      Introduction

      Configuration management systems are designed to make controlling large numbers of servers easy for administrators and operations teams. They allow you to control many different systems in an automated way from one central location.

      While there are many popular configuration management systems available for Linux systems, such as Chef and Puppet, these are often more complex than many people want or need. Ansible is a great alternative to these options because it requires a much smaller overhead to get started.

      In this guide, we will discuss how to install Ansible on an Ubuntu 18.04 server and go over some basics of how to use the software.

      How Does Ansible Work?

      Ansible works by configuring client machines from a computer that has the Ansible components installed and configured.

      It communicates over normal SSH channels to retrieve information from remote machines, issue commands, and copy files. Because of this, an Ansible system does not require any additional software to be installed on the client computers.

      This is one way that Ansible simplifies the administration of servers. Any server that has an SSH port exposed can be brought under Ansible’s configuration umbrella, regardless of what stage it is at in its life cycle. This means that any computer that you can administer through SSH, you can also administer through Ansible.

      Ansible takes on a modular approach, making it easy to extend to use the functionalities of the main system to deal with specific scenarios. Modules can be written in any language and communicate in standard JSON.

      Configuration files are mainly written in the YAML data serialization format due to its expressive nature and its similarity to popular markup languages. Ansible can interact with hosts either through command line tools or its configuration scripts, which are known as Playbooks.

      Prerequisites

      To follow this tutorial, you will need:

      • Two or more Ubuntu 18.04 servers. One of these will be used as your Ansible server, while the remainder will be used as your Ansible hosts. Each should have a non-root user with sudo privileges and a basic firewall configured. You can set this up by following our Initial Server Setup Guide for Ubuntu 18.04. Please note that the examples throughout this guide specify three Ansible hosts, but the commands and configurations shown can be adjusted for any number of clients.

      • SSH keys generated for the non-root user on your Ansible server. To do this, follow Step 1 of our guide on How to Set Up SSH Keys on Ubuntu 18.04. For the purposes of this tutorial, you can save the key pair to the default location (~/.ssh/id_rsa) and you do not need to password-protect it.

      Step 1 — Installing Ansible

      To begin using Ansible as a means of managing your various servers, you need to install the Ansible software on at least one machine.

      To get the latest version of Ansible for Ubuntu, you can add the project’s PPA (personal package archive) to your system. Before doing this, though, you should first update your package index and install the software-properties-common package. This software will make it easier to manage this and other independent software repositories:

      • sudo apt update
      • sudo apt install software-properties-common

      Then add the Ansible PPA by typing the following command:

      • sudo apt-add-repository ppa:ansible/ansible

      Press ENTER to accept the PPA addition.

      Next, refresh your system’s package index once again so that it is aware of the packages available in the PPA:

      Following this update, you can install the Ansible software:

      Your Ansible server now has all of the software required to administer your hosts.

      Step 2 — Configuring SSH Access to the Ansible Hosts

      As mentioned previously, Ansible primarily communicates with client computers through SSH. While it certainly has the ability to handle password-based SSH authentication, using SSH keys can help to keep things simple.

      On your Ansible server, use the cat command to print the contents of your non-root user’s SSH public key file to the terminal’s output:

      Copy the resulting output to your clipboard, then open a new terminal and connect to one of your Ansible hosts using SSH:

      • ssh sammy@ansible_host_ip

      Switch to the client machine’s root user:

      As the root user, open the authorized_keys within the ~/.ssh directory:

      • nano ~/.ssh/authorized_keys

      In the file, paste your Ansible server user’s SSH key, then save the file and close the editor (press CTRL + X, Y, then ENTER). Then run the exit command to return to the host’s non-root user:

      Lastly, because Ansible uses a python interpreter located at /usr/bin/python to run its modules, you’ll need to install Python 2 on the host in order for Ansible to communicate with it. Run the following commands to update the host’s package index and install the python package:

      • sudo apt update
      • sudo apt install python

      Following this, you can run the exit command once again to close the connection to the client:

      Repeat this process for each server you intend to control with your Ansible server. Next, we’ll configure the Ansible server to connect to these hosts using Ansible’s hosts file.

      Step 3 — Setting Up Ansible Hosts

      Ansible keeps track of all of the servers that it knows about through a hosts file. We need to set up this file first before we can begin to communicate with our other computers.

      Open the file with sudo privileges, like this:

      • sudo nano /etc/ansible/hosts

      Inside the file, you will see a number of example configurations that have been commented out (with a # preceding each line). These examples won’t actually work for us since the hosts listed in each one are made up. We will, however, keep these examples in the file to help us with configuration if we want to implement more complex scenarios in the future.

      The hosts file is fairly flexible and can be configured in a few different ways. The syntax we are going to use, though, looks like this:

      [group_name]
      alias ansible_ssh_host=your_server_ip
      

      In this example, group_name is an organizational tag that lets you refer to any servers listed under it with one word, while alias is just a name to refer to one specific server.

      So, in our scenario, we are imagining that we have three servers we are going to control with Ansible. At this point, these servers are accessible from the Ansible server by typing:

      You should not be prompted for a password if you have set this up correctly. For the purpose of demonstration, we will assume that our hosts' IP addresses are 203.0.113.1, 203.0.113.2, and 203.0.113.3. We will set this up so that we can refer to these individually as host1, host2, and host3, or as a group with the name servers.

      This is the block that we should add to our hosts file to accomplish this:

      /etc/ansible/hosts

      [servers]
      host1 ansible_ssh_host=203.0.113.1
      host2 ansible_ssh_host=203.0.113.2
      host3 ansible_ssh_host=203.0.113.3
      

      Hosts can be in multiple groups and groups can configure parameters for all of their members. Let's try this out now.

      With our current settings, if we tried to connect to any of these hosts with Ansible, the command would fail (assuming you are not operating as the root user). This is because your SSH key is embedded for the root user on the remote systems and Ansible will by default try to connect as your current user. A connection attempt will get this error:

      Output

      host1 | UNREACHABLE! => { "changed": false, "msg": "Failed to connect to the host via ssh.", "unreachable": true }

      On the Ansible server, we're using a user called sammy. Ansible will try to connect to each host with ssh sammy@server. This will not work if the sammy user is not on the remote system as well.

      We can create a file that tells all of the servers in the "servers" group to connect as the root user.

      To do this, we will create a directory in the Ansible configuration structure called group_vars. Within this folder, we can create YAML-formatted files for each group we want to configure:

      • sudo mkdir /etc/ansible/group_vars
      • sudo nano /etc/ansible/group_vars/servers

      We can put our configuration in here. YAML files start with "---", so make sure you don't forget that part.

      /etc/ansible/group_vars/servers

      ---
      ansible_ssh_user: root
      

      Save and close this file when you are finished.

      If you want to specify configuration details for every server, regardless of group association, you can put those details in a file at /etc/ansible/group_vars/all. Individual hosts can be configured by creating files named after their alias under a directory at /etc/ansible/host_vars.

      Step 4 — Using Simple Ansible Commands

      Now that we have our hosts set up and enough configuration details to allow us to successfully connect to our hosts, we can try out our very first command.

      Ping all of the servers you configured by typing:

      Ping output

      host1 | SUCCESS => {
          "changed": false,
          "ping": "pong"
      }
      
      host3 | SUCCESS => {
          "changed": false,
          "ping": "pong"
      }
      
      host2 | SUCCESS => {
          "changed": false,
          "ping": "pong"
      }
      

      This is a basic test to make sure that Ansible has a connection to all of its hosts.

      The all means all hosts. We could just as easily specify a group:

      We could also specify an individual host:

      We can specify multiple hosts by separating them with colons:

      • ansible -m ping host1:host2

      The -m ping portion of the command is an instruction to Ansible to use the "ping" module. These are basically commands that you can run on your remote hosts. The ping module operates in many ways like the normal ping utility in Linux, but instead it checks for Ansible connectivity.

      The ping module doesn't really take any arguments, but we can try another command to see how that works. We pass arguments into a script by typing -a.

      The "shell" module lets us send a terminal command to the remote host and retrieve the results. For instance, to find out the memory usage on our host1 machine, we could use:

      • ansible -m shell -a 'free -m' host1

      Shell output

      host1 | SUCCESS | rc=0 >>
                   total       used       free     shared    buffers     cached
      Mem:          3954        227       3726          0         14         93
      -/+ buffers/cache:        119       3834
      Swap:            0          0          0
      

      With that, your Ansible server configured and you can successfully communicate and control your hosts.

      Conclusion

      In this tutorial, we have configured Ansible and verified that it can communicate with each host. We have also used the ansible command to execute simple tasks remotely.

      Although this is useful, we have not covered the most powerful feature of Ansible in this article: Playbooks. Ansible Playbooks are a powerful, simple way to manage server configurations and multi-machine deployments. For an introduction to Playbooks, see this guide. Additionally, we encourage you to check out the official Ansible documentation to learn more about the tool.



      Source link