在Ubuntu 16.04上使用RVM安装Ruby on Rails的方法

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

简介

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

您可以使用命令行工具 RVM(Ruby Version Manager)轻松安装 Ruby 和 Rails。RVM 还允许您管理和使用多个 Ruby 环境,并允许您在这些环境之间切换。该项目存储库位于 [GitHub] (https://github.com/rvm/rvm)。

在本指南中,我们将在 Ubuntu 16.04 服务器上安装 RVM,然后使用它来安装稳定版本的 Ruby 和 Rails。

先决条件

本教程将带您完成通过 RVM 安装 Ruby on Rails 的安装过程。要按照本教程操作,您需要一个带有 [非根用户] (https://www.digitalocean.com/community/tutorials/initial-server-setup-with-ubuntu-16-04) 的 Ubuntu 16.04 服务器。

安装

使用 RVM 快速安装 Ruby on Rails 的方法是以常规用户身份运行以下命令。在安装过程中,系统将提示您输入常规用户的密码。

首先,我们将使用 gpg 命令联系公钥服务器,并请求与给定 ID 关联的密钥。在本例中,我们请求 RVM 项目的密钥,该密钥用于签署每个 RVM 发布版。拥有 RVM 项目的公钥允许我们验证我们将要下载的 RVM 发布版的合法性,该发布版使用与之匹配的私钥签名。

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

现在,让我们进入可写位置,比如 /tmp 目录,然后将 RVM 脚本下载到文件中:

cd /tmp

我们将使用 curl 命令从项目网站下载 RVM 安装脚本。前导反斜杠确保我们使用常规的 curl 命令,而不是任何经过修改的、别名化的版本。

我们将附加 -s 标志以指示实用程序应在静默模式下操作,以及 -S 标志以覆盖一些内容,以允许 curl 在失败时输出错误。-L 标志告诉实用程序跟随重定向,最后 -o 标志指示将输出写入文件而不是标准输出。

将所有这些元素放在一起,我们的完整命令将如下所示:

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

下载完成后,如果您想在应用之前审计脚本的内容,请运行:

less /tmp/rvm.sh

然后我们可以将其 [pipe] (https://www.digitalocean.com/community/tutorials/an-introduction-to-linux-i-o-redirection#pipes) 到 bash 中以安装最新的稳定 Rails 版本,这也将拉取相关的最新稳定 Ruby 发行版。

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

在安装过程中,系统将提示您输入常规用户的密码。安装完成后,从安装它们的目录中源化 RVM 脚本,通常会在您的 home/username 目录中。

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

现在,您应该已经配置好了完整的 Ruby on Rails 环境。

安装特定的 Ruby 和 Rails 版本

如果您需要为您的应用程序安装特定版本的 Ruby,而不仅仅是最新版本,您可以使用 RVM 来实现。首先,通过列出它们来查看可用的 Ruby 版本:

rvm list known

然后,通过 RVM 安装您需要的特定版本的 Ruby,其中 ruby_version 可以输入为 ruby-2.3.0,例如,或者只是 2.3.0

rvm install ruby_version

安装完成后,我们可以通过输入以下命令来列出我们已安装的可用 Ruby 版本:

rvm list

我们可以通过输入以下命令在不同的 Ruby 版本之间切换:

rvm use ruby_version

由于 Rails 是一个 gem,我们还可以使用 gem 命令安装各种版本的 Rails。首先,通过进行搜索来列出 Rails 的有效版本:

gem search '^rails$' --all

接下来,我们可以安装我们需要的 Rails 版本。请注意,rails_version 只会引用版本号,如 4.2.7

gem install rails -v rails_version 

我们可以通过创建 gemsets 然后在其中使用正常的 gem 命令来在每个 Ruby 中使用各种 Rails 版本:

rvm gemset create gemset_name # 创建一个 gemset
rvm ruby_version@gemset_name  # 指定 Ruby 版本和我们的新 gemset

gemsets 允许我们拥有自包含的 gem 环境,并允许我们为我们安装的每个 Ruby 版本拥有多个环境。

安装 JavaScript 运行环境

一些 Rails 功能,比如 Asset Pipeline,依赖于 JavaScript 运行环境。我们将通过 apt-get 安装 Node.js 来提供这个功能。

就像我们在安装 RVM 脚本时做的那样,我们可以进入一个可写的目录,通过将其输出到文件来验证 Node.js 脚本,然后使用 less 命令来查看它:

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

一旦我们对 Node.js 脚本满意,我们可以安装 NodeSource Node.js v6.x 仓库:

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

这里使用的 -E 标志将保留用户现有的环境变量。

现在我们可以更新 apt-get 并使用它来安装 Node.js:

sudo apt-get update
sudo apt-get install -y nodejs

到这一步,你可以开始测试你的 Ruby on Rails 安装,并开始开发 Web 应用程序。

了解更多

我们已经介绍了如何安装 RVM 和 Ruby on Rails 的基础知识,以便你可以使用多个 Ruby 环境。在下一步中,你可以了解更多关于使用 RVM 以及如何使用 RVM 管理你的 Ruby 安装。为了更好的可扩展性、集中性和控制性,你可能希望将其与PostgreSQL或MySQL一起使用,而不是默认的 sqlite3 数据库。随着你的需求增长,你还可以学习如何在多个服务器上扩展 Ruby on Rails 应用程序。

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

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

相关文章

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 或…

线性表一(vector)

#include<bits/stdc.h> using namespace std; vector<int> a(5,2);//定义一个初始长度为5&#xff0c;每个元素值为2的可变数组 vector<char> b(3);//定义一个初始长度为3&#xff0c;每个元素为默认值的可变数组 vector<int> v;//定义一个长度为0的可…

go 读取excel数据存储到mysql

一、安装依赖 go get github.com/go-sql-driver/mysql go get github.com/jmoiron/sqlx 二、main.go package mainimport ("fmt""github.com/jmoiron/sqlx""log" ) import "github.com/tealeg/xlsx" import _ "github.com/go-s…

用户态缓存:链式缓冲区(Chain Buffer)

目录 链式缓冲区&#xff08;Chain Buffer&#xff09;简介 为什么选择链式缓冲区&#xff1f; 代码解析 1. 头文件与类型定义 2. 结构体定义 3. 宏定义与常量 4. 环形缓冲区的基本操作 5. 其他辅助函数 6. 数据读写操作的详细实现 7. 总结 8. 结合之前的内容 9. 具…

vue2+elementUI实现handleSelectionChange批量删除-前后端

功能需求&#xff1a;实现选中一个或多个执行批量删除操作 在elementUI官网选择一个表格样式模板&#xff0c;Element - The worlds most popular Vue UI framework 这里采用的是 将代码复制到前端&#xff0c;这里是index.vue <template><el-button type"dang…