在Ubuntu 18.04上使用rbenv安装Ruby on Rails的方法

前些天发现了一个巨牛的人工智能学习网站,通俗易懂,风趣幽默,忍不住分享一下给大家。点击跳转到网站。

简介

Ruby on Rails 是开发人员创建网站和 Web 应用程序的最流行的应用程序堆栈之一。Ruby 编程语言与 Rails 开发框架相结合,使应用程序开发变得简单。

您可以使用命令行工具 rbenv 轻松安装 Ruby 和 Rails。使用 rbenv 将为您提供一个稳定的环境,用于开发 Ruby on Rails 应用程序,因为它可以让您轻松切换 Ruby 版本,保持整个团队使用相同的版本。

rbenv 支持指定应用程序特定版本的 Ruby,允许您更改每个用户的全局 Ruby,并允许您使用环境变量覆盖 Ruby 版本。

本教程将带您完成通过 rbenv 安装 Ruby 和 Rails 的过程。

先决条件

要按照本教程操作,您需要:

  • 通过遵循 Ubuntu 18.04 初始服务器设置指南设置的一个 Ubuntu 18.04 服务器,包括一个 sudo 非根用户和一个防火墙。
  • 使用官方 PPA 安装了 Node.js,如《如何在 Ubuntu 18.04 上安装 Node.js》中所述。一些 Rails 功能(如 Asset Pipeline)依赖于 JavaScript 运行时。Node.js 提供了这种功能。

步骤 1 – 安装 rbenv 和依赖项

Ruby 依赖于几个软件包,您可以通过软件包管理器安装这些软件包。安装这些软件包后,您可以安装 rbenv 并使用它来安装 Ruby。

首先,更新软件包列表:

sudo apt update

接下来,安装安装 Ruby 所需的依赖项:

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

一旦依赖项下载完成,您可以安装 rbenv 本身。将 rbenv 存储库从 GitHub 克隆到目录 ~/.rbenv

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

接下来,将 ~/.rbenv/bin 添加到您的 $PATH 中,以便您可以使用 rbenv 命令行实用程序。通过修改 ~/.bashrc 文件来实现这一点,以便它影响将来的登录会话:

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

然后将命令 eval "$(rbenv init -)" 添加到您的 ~/.bashrc 文件中,以便 rbenv 自动加载:

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

接下来,将您对 ~/.bashrc 文件所做的更改应用到当前的 shell 会话:

source ~/.bashrc

通过使用 type 命令验证 rbenv 是否正确设置,该命令将显示有关 rbenv 命令的更多信息:

type rbenv

您的终端窗口将显示以下内容:

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

接下来,安装 [ruby-build] (https://github.com/rbenv/ruby-build) 插件。此插件添加了rbenv install 命令,简化了安装新版本的 Ruby 的过程:

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

到目前为止,您已经安装了 rbenv 和 ruby-build。接下来,让我们安装 Ruby。

步骤 2 – 使用 ruby-build 安装 Ruby

现在安装了 ruby-build 插件,您可以通过一个简单的命令安装您可能需要的 Ruby 版本。首先,让我们列出所有可用的 Ruby 版本:

rbenv install -l

该命令的输出应该是一个您可以选择安装的版本的长列表。

让我们安装 Ruby 2.5.1:

rbenv install 2.5.1

安装 Ruby 可能需要一些时间,所以准备好安装需要一些时间。

安装完成后,使用 global 子命令将其设置为我们的默认 Ruby 版本:

rbenv global 2.5.1

通过检查其版本号来验证 Ruby 是否已正确安装:

ruby -v

如果您安装了 Ruby 2.5.1 版本,上述命令的输出应该类似于:

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

要安装和使用不同版本的 Ruby,请使用不同的版本号运行 rbenv 命令,如 rbenv install 2.3.0rbenv global 2.3.0

现在,您至少安装了一个版本的 Ruby,并设置了默认的 Ruby 版本。接下来,我们将设置 gems 和 Rails。

第三步 – 使用 Gems

Gems 是 Ruby 库的分发方式。您可以使用 gem 命令来管理这些 Gems。我们将使用这个命令来安装 Rails。

当您安装一个 Gem 时,安装过程会生成本地文档。这可能会显著增加每个 Gem 的安装时间,因此通过创建一个名为 ~/.gemrc 的文件来关闭本地文档生成,其中包含一个配置设置来关闭此功能:

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

Bundler 是一个用于管理项目的 Gem 依赖关系的工具。接下来安装 Bundler Gem,因为 Rails 依赖于它。

gem install bundler

您将看到如下输出:


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

您可以使用 gem env 命令(子命令 envenvironment 的缩写)来了解更多关于 Gems 的环境和配置。您可以使用 home 参数来查看 Gems 的安装位置,就像这样:

gem env home

您将看到类似于以下的输出:

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

一旦您设置好 Gems,就可以安装 Rails。

第四步 – 安装 Rails

要安装 Rails,使用 gem install 命令以及 -v 标志来指定版本。在本教程中,我们将使用版本 5.2.0

gem install rails -v 5.2.0

gem 命令会安装您指定的 Gem,以及每个依赖项。Rails 是一个复杂的 Web 开发框架,有许多依赖项,因此该过程将需要一些时间来完成。最终,您将看到一条消息,指出 Rails 已安装,并附带其依赖项:


...
Successfully installed rails-5.2.0
38 gems installed

rbenv 通过创建指向当前启用的 Ruby 版本使用的文件的 shims 目录来工作。通过 rehash 子命令,rbenv 在该目录中维护 shims,以匹配服务器上安装的每个 Ruby 版本的每个 Ruby 命令。每当您安装新版本的 Ruby 或提供命令的 Gem(就像 Rails 一样)时,都应该运行:

rbenv rehash

通过使用以下命令验证 Rails 是否已正确安装其版本:

rails -v

如果安装正确,您将看到已安装的 Rails 版本:


Rails 5.2.0

此时,您可以开始测试您的 Ruby on Rails 安装,并开始开发 Web 应用程序。让我们看看如何保持 rbenv 最新。

第五步 – 更新 rbenv

由于您手动使用 Git 安装了 rbenv,您可以随时使用 ~/.rbenv 目录中的 git pull 命令升级您的安装到最新版本:

cd ~/.rbenv
git pull

这将确保我们使用的是 rbenv 的最新版本。

第六步 – 卸载 Ruby 版本

当您下载额外的 Ruby 版本时,您可能会在 ~/.rbenv/versions 目录中积累比您想要的更多的版本。使用 ruby-build 插件的 uninstall 子命令来删除这些先前的版本。

例如,输入以下内容将卸载 Ruby 版本 2.1.3:

rbenv uninstall 2.1.3

通过 rbenv uninstall 命令,您可以清理旧版本的 Ruby,以便您不会安装比您当前使用的更多的版本。

第七步 – 卸载 rbenv

如果您决定不再使用 rbenv,可以从系统中删除它。

要执行此操作,首先在编辑器中打开您的 ~/.bashrc 文件:

nano ~/.bashrc

从文件中找到并删除以下两行:


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

保存文件并退出编辑器。

然后使用以下命令删除 rbenv 和所有已安装的 Ruby 版本:

 rm -rf `rbenv root`

注销并重新登录以应用对您的 shell 的更改。

结论

在本教程中,您安装了 rbenv 和 Ruby on Rails。从这里开始,您可以了解如何使这些环境更加健壮。

探索如何将 Ruby on Rails 与 PostgreSQL 或 MySQL 一起使用,而不是其默认的 sqlite3 数据库,这将为您的应用程序提供更多的可扩展性、集中性和稳定性。随着您的需求增长,您还可以了解如何在多个服务器上扩展 Ruby on Rails 应用程序。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.xdnf.cn/news/146416.html

如若内容造成侵权/违法违规/事实不符,请联系一条长河网进行投诉反馈,一经查实,立即删除!

相关文章

[JavaEE] UDP协议

目录 再谈端口号 一、端口号的划分 二、UDP协议 三、UDP的特点 再谈端口号 一、端口号的划分 0-1023:知名端口号,端口号固定,其中包括HTTP,FTP,SSH等广为使用的应用层协议。 1024-65535:操作系统动态分…

数据结构|二叉搜索树

🍬 mooridy-CSDN博客 🍬数据结构专栏(更新中) 目录 1. ⼆叉搜索树的概念 2. ⼆叉搜索树的性能分析 3.⼆叉搜索树key和key/value key搜索场景 key/value搜索场景 4. 二叉搜索树的代码实现 4.1 ⼆叉搜索树的插⼊ 4.2 ⼆叉搜索…

java----LinkedHashMap

.由键决定:有序、不重复、无索引 .这里的有序指的是保证存储和去除的元素顺序一致 原理:底层数据结构依然是哈希表,只是每个键值对元素又额外多了一个双链表的机制记录存储的顺序。 内容来自:集合进阶-09-LinkedHashMap_哔哩哔哩_bilibili

ChatGPT 在国内使用的方法

AI如今很强大,聊聊天、写论文、搞翻译、写代码、写文案、审合同等等,ChatGPT 真是无所不能~ 作为一款出色的大语言模型,ChatGPT 实现了人类般的对话交流,最主要是能根据上下文进行互动。 接下来,我将介绍 ChatGPT 在国…

hackmyvm靶场--zon

环境 攻击机kali 靶机 未知 主机探测 因为在同一个局域网内使用ARP协议探测存活主机 靶机为192.168.56.128 端口探测 常见的80和22端口 那么一定是寻找web漏洞拿shell了 后台扫描 后台扫描常用dirsearch和gobuster,有时候小字典可能不太行,可以尝试换个大点…

JAVA——数据流、序列化流

目录 一、DataOutputStream(数据输出流) 二、DataInputStream(数据输入流) 三、序列化流 1.1 ObjectOutputStream(对象字节输出流) 1.2 OutputStream(对象字节输入流) 四、补充 一、DataOutputStream(数据输出流) …

Flutter 获取手机连接的Wifi信息

测试版本 Flutter:3.7.6Dart:2.19.3 network_info_plus: 4.0.1 前言 我在做设备配网的时候,需要选择配网的WiFi。用下拉选择框展示WiFi列表。现在有个需求:默认展示的设备为手机连接的wifi。要实现这个需求只要能够获取到手机连接的wifi信息…

直接插入排序(C语言实现)

目录 1.直接插入排序介绍 2.实现思路 3.动图展示 4.代码实现 (升序) 单趟排序实现 单趟排序代码 直接插入排序函数 5.代码测试 6.时空复杂度分析 时间复杂度O(N^2) 空间复杂度O(1) 1.直接插入排序介绍 插入排序,又叫直接插入排序。…

(十七)MATLAB读取Gazebo话题信息

在仿真实验过程中,我们有时需要实时读取ROS及Gazebo话题,目前互联网上关于读取ROS的话题资料较多,读取Gazebo话题的参考资料较少,本文将以Ubuntu下固定翼仿真为例,展示如果通过MATLAB的插件GazeboPlugin读取Gazebo话题…

MoFA: 迈向AIOS

再一次向朋友们致以中秋的祝福! MoFA (Modular Framework for Agents)是一个独特的模块化AI智能体框架。MoFA以组合(Composition)的逻辑和编程(Programmable)的方法构建AI智能体。开发者通过模版的继承、编程、定制智能体&#xf…

C++:多态(协变,override,final,纯虚函数抽象类,原理)

目录 编译时多态 函数重载 模板 运行时多态 多态的实现 实现多态的条件 协变 析构函数的重写 override 关键字 final 关键字 重载、重写、隐藏对比 纯虚函数和抽象类 多态的原理 多态是什么? 多态就是有多种形态 多态有两种,分别是编译时…

【前端学习】作用域实际问题学习记录

在复习apply,call,bind的时候遇到了一个作用域问题。 let name noName let age 18function getMyname() {console.log(my name is this.name, and I am this.age years old); }getMyname() }在全局使用let定义变量name和age之后,运行g…

★ C++进阶篇 ★ 二叉搜索树

Ciallo&#xff5e;(∠・ω< )⌒☆ ~ 今天&#xff0c;我将继续和大家一起学习C进阶篇第三章----二叉搜索树 ~ ❄️❄️❄️❄️❄️❄️❄️❄️❄️❄️❄️❄️❄️❄️ 澄岚主页&#xff1a;椎名澄嵐-CSDN博客 C基础篇专栏&#xff1a;★ C基础篇 ★_椎名澄嵐的博客-CSD…

从零开始学习TinyWebServer

写在前面 项目参考&#xff1a;https://github.com/qinguoyi/TinyWebServer 写作框架/图参考&#xff1a;https://blog.csdn.net/qq_52313711/article/details/136356042?spm1001.2014.3001.5502 原本计划是&#xff0c;先将项目代码大概看一遍&#xff0c;然后再着手实现一下…

SOCKS5代理为何比HTTP代理更快?

在代理类型的选择上&#xff0c;SOCKS5代理经常被认为比HTTP代理更快&#xff0c;这是因为它们在工作原理和功能实现上存在较大的差异。让我们来探讨一下&#xff0c;为什么SOCKS5代理的速度通常比HTTP代理要快。 1. 协议的差异 SOCKS5代理&#xff1a;它是一个通用的代理协议…

【yolo破损纸板-包装盒-快递袋缺陷检测】

yolo破损纸板-包装盒-快递袋缺陷检测 破损纸质包装盒检测方盒型快递包裹检测 破损纸质包装盒检测 数据集合模型 可视化 方盒型快递包裹检测 数据集和模型 train: ../train/images val: ../valid/images test: ../test/images nc: 1 names: - box_packet可视化

初识linux(2)

接着上篇的初识linux(1)来接着说没看过的可以去看看 cp指令 语法&#xff1a;cp [选项] 源文件或目录 目标文件或目录 功能: 复制文件或目录 说明: cp指令用于复制文件或目录&#xff0c;如同时指定两个以上的文件或目录&#xff0c;且最后的目的地是一个已经存在的目录&#…

华为HarmonyOS地图服务 5 - 利用UI控件和手势进行地图交互

场景介绍 本章节将向您介绍如何使用地图的手势。 Map Kit提供了多种手势供用户与地图之间进行交互,如缩放、滚动、旋转和倾斜。这些手势默认开启,如果想要关闭某些手势,可以通过MapComponentController类提供的接口来控制手势的开关。 接口说明 以下是地图的控件和手势相…

安卓数据存储——SharedPreferences

共享参数 SharedPreferences 1、sharedPreferences是Android的一个轻量级存储工具&#xff0c;采用的存储结构是key - value的键值对方式 2、共享参数的存储介质是符合XML规范的配置文件。保存路径是&#xff1a;/data/data/应用包名/shared_prefs/文件名.xml 使用场景&…

OpenCV特征检测(7)角点检测函数goodFeaturesToTrack()的使用

操作系统&#xff1a;ubuntu22.04 OpenCV版本&#xff1a;OpenCV4.9 IDE:Visual Studio Code 编程语言&#xff1a;C11 算法描述 确定图像上的强角点。 该函数根据 240中所描述的方法查找图像中最显著的角点或者指定图像区域内的最显著角点。 函数使用 cornerMinEigenVal 或…