如何在Ubuntu上安装Ruby和Sinatra

介绍

如果选择几个词来定义Sinatra,那么肯定会是设计简洁,给人启发。这种项目构建的想法引领了很多项目的构建潮流——跨越不同的编程语言和平台的编程方案。

“新颖”的Web开发库Sinatra可以让您从头开始快速构建Web应用程序。与日益流行的Ruby on Rails框架不同,在Sinatra上创建的应用程序可以由单个文件组成,这块完全取决于Sinatra gem。

在这篇文章中,我们将学习如何在Ubuntu CVM上安装最新版本的官方Ruby解释器以及Sinatra Web应用程序开发库。之后,我们将创建一个示例项目并继续进行实际部署。要完成本教程,您必须拥有一台服务器,不过我个人更推荐您使用免费的腾讯云开发者实验室进行试验,学会安装后在购买服务器

安装Ruby和Sinatra

更新操作系统

首先,我们需要将默认组件升级到最新版本,以确保我们拥有最新的所有内容。更新软件源列表并升级已过时的应用程序:

sudo apt-get    update
sudo apt-get -y upgrade

获得基本的构建/开发工具

在继续安装目标应用程序之前,我们将使用默认的包管理器安装必要的开发工具包:build-essential。此软件包包含从源代码安装某些内容所需的工具。

运行以下命令安装build-essential包:

sudo apt-get install -y build-essential

接下来,我们将获得常用的开发和部署相关工具,例如Git。运行以下命令以安装一些其他常用工具:

sudo apt-get install -y cvs subversion git-core mercurial

安装Ruby版本管理器(RVM)

Ruby Version Manager(RVM)目标是使开发人员可以快速开始使用Ruby并使用它开发应用程序。

RVM不仅允许您同时使用多个版本的Ruby,而且它还带有内置工具来创建和使用虚拟环境。在RVM的帮助下,可以创建任意数量的完全隔离的gemsets,其中依赖项,软件包和默认的Ruby安装可以根据您的需求进行精心设计,并在不同的部署阶段之间进行相应的保证,要下载和安装RVM,请运行以下命令:

curl -L get.rvm.io | bash -s stable

并使用RVM shell脚本创建系统环境:

source /etc/profile.d/rvm.sh

安装Ruby

在下载RVM和配置系统环境之后,从现在开始使用Ruby所需要的只是从源实际安装Ruby这将由RVM处理。要使用RVM从源安装Ruby,请运行以下命令:

rvm reload
rvm install 2.1.0

安装Sinatra

一旦我们有RVM安装Ruby,我们可以使用默认的RubyGems包在我们的系统上设置Sinatra。RubyGems是默认的Ruby包管理器,它是一个很好的工具。

运行以下命令以使用gem安装Sinatra:

gem install sinatra

创建www用户组和部署用户

在我们完成所有安装之后,是时候进入基础并创建一个Linux组和一个用户来托管Web应用程序。为此,我们可以将我们的组命名为www,将用户命名为deployer。

添加新用户组:

# Usage: sudo addgroup [group name]
sudo addgroup www

创建一个新用户并将其添加到该组:

# Create a new user:
# Usage: sudo adducer [user name]
# Follow on-screen instructions to user-related
# information such as the desired password.
sudo adduser deployer

# Add the user to an already existing group:
# Usage: sudo adducer [user name] [group name]
sudo adduser deployer www

现在在/var目录中创建应用程序文件夹:

sudo mkdir /var/www

并设置权限:

# Set the ownership of the folder to members of `www` group
sudo chown -R :www  /var/www

# Set folder permissions recursively
sudo chmod -R g+rwX /var/www

# Ensure permissions will affect future sub-directories etc.
sudo chmod g+s      /var/www

使用文本编辑器nano编辑/etc/sudoers以便给新用户部署sudo

nano /etc/sudoers

向下滚动文件并找到root定义的位置:

..

# User privilege specification
root    ALL=(ALL:ALL) ALL

..

root ALL=(ALL) ALL之后追加以下内容:

deployer ALL=(ALL:ALL) ALL

/etc/sudoers文件部分现在应如下所示:

..

# User privilege specification
root     ALL=(ALL:ALL) ALL
deployer ALL=(ALL:ALL) ALL

..

按CTRL + X并按Y确认保存并退出。

创建一个“Hello world!” 用于Sinatra测试

注意:下面是一个简短的教程,介绍如何为演示目的创建一个基于Sinatra的应用程序,该应用程序旨在用作我们的部署文章的示例。要获得有关使用Sinatra的更深入的知识,请查看官方的Sinatra:入门文档。

应用目录

让我们通过创建一个示例Hello world!应用程序的目录来开始我们的Sinatra之旅。

运行以下命令以创建应用程序目录:

mkdir /var/www/my_app
cd    /var/www/my_app

RACK对文件层次结构做出了一些假设。因此,我们需要在应用程序文件旁边创建两个目录:tmppublic。让我们创建它们:

mkdir tmp
mkdir public
mkdir pids
mkdir logs

并添加一个restart.txt稍后由应用程序服务器使用:

touch tmp/restart.txt

我们的最终申请结构:

/my_app                    # /var/www/my_app
   |-- /public             # Static files (and for Passenger server)
   |-- /tmp              
         |-- restart.txt   # Application restart / reload file
   |-- /pids               # PID files
   |-- /logs               # Log files
   |-- config.ru           # Rack file (for servers)
   |-- app.rb              # Application module

示例应用文件

现在,我们可以开始构建一个Hello world!应用程序。

运行以下命令,使用nano编辑器在应用程序目录my_app中创建app.rb

nano app.rb

复制并粘贴以下代码块:

require 'rubygems'
require 'sinatra/base'

class MyApp < Sinatra::Base

  get '/' do
    'Hello world!'
  end

end

按CTRL + X保存并退出并用Y确认。接下来,我们可以创建config.ru文件,Web应用程序服务器将用它来运行我们的程序。

运行以下命令,使用nano文本编辑器在应用程序目录内创建my_app

nano config.ru

复制并粘贴以下代码块:

require File.expand_path('../app.rb', __FILE__)
use Rack::ShowExceptions
run MyApp.new    

按CTRL + X保存并退出并用Y确认。现在让我们创建我们的Gemfile:

nano Gemfile

复制并粘贴以下代码块:

source 'https://rubygems.org'
gem 'rack'
gem 'sinatra'

按CTRL + X保存并退出并用Y确认。

并使用bundle执行这些gem的安装:

bundle install

测试应用程序(机架)

为了测试您的应用程序,您只需使用rackup运行测试服务器即可。运行以下命令以启动测试服务器:

rackup config.ru --port=8080

# Hello world!

# To turn off the test server, press CTRL+C

结论

虽然我们已经介绍了创建Sinatra应用程序的基础知识,但出于部署目的,您需要服务器处理来自开发计算机的源代码,以使您的应用程序联机。因此,您需要将应用程序的存储库(即源代码)放入(即上传)到CVM上。您可以使用FTP方式或者SFTP方式上传,或者使用一劳永逸的方法通过SSHFS远程挂载文件夹,方便远程coding!。更多Linux教程请前往腾讯云+社区学习更多知识。


参考文献:《How To Install Ruby 2.1.0 And Sinatra On Ubuntu 13 With RVM》

原创声明,本文系作者授权云+社区发表,未经许可,不得转载。

如有侵权,请联系 yunjia_community@tencent.com 删除。

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏Netkiller

PHP 安全与性能

PHP 安全与性能 摘要 我的系列文档 Netkiller Architect 手札Netkiller Developer 手札Netkiller PHP 手札...

3555
来自专栏Netkiller

PHP 安全与性能

PHP 安全与性能 摘要 我的系列文档 Netkiller Architect 手札Netkiller Developer 手札Netkiller PHP 手札...

4666
来自专栏你不就像风一样

Gradle构建工具简明教程(IDEA篇)

GRADLE_USER_HOME 的作用是让其他程序检测到本地.gradle文件夹的位置,

1291
来自专栏前端真相

webpack、npm 错误汇总

原因: 版本10 fs.promises的API是实验性的,webstorm不允许使用。

3167
来自专栏云原生架构实践

JHipster生成微服务架构的应用栈(二)- 认证微服务示例

这里选择JHipster UAA server,这是一种基于OAuth认证机制的微服务。

1934
来自专栏不止是前端

Vue:前后端数据联调

4019
来自专栏SpringBoot

springboot,全部配置文件

3081
来自专栏乐沙弥的世界

Nginx流媒体支持配置

有关Nginx相关的基础知识 Linux 6下安装编译安装Nginx Nginx 概述及日常管理 Nginx基于IP,端口,域名配置虚拟主机 L...

1840
来自专栏乐百川的学习频道

Intellij IDEA 2017.3 基于编辑器的REST客户端介绍

最近Intellij IDEA更新到了2017.3这一版本,这个版本又增加了很多新功能。我觉得其中这个基于编辑器的REST客户端这个功能很不错,可以为我们带来很...

2308
来自专栏运维咖啡吧

LDAP落地实战(一):OpenLDAP部署及管理维护

上边来了一堆的名词解释,看的云里雾里,还不是很明白,怎么跟自己的组织架构对应起来呢?看看下边的图是不是清晰明了

2633

扫码关注云+社区