Loading [MathJax]/jax/input/TeX/config.js
前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >Rails 部署总结

Rails 部署总结

原创
作者头像
BigNerdCoding
发布于 2018-03-20 08:06:10
发布于 2018-03-20 08:06:10
7.1K0
举报
文章被收录于专栏:BigNerdCodingBigNerdCoding
Cover
Cover

学 Ruby 和 Rails 有一段时间了,后面准备也准备把站点换了。不过开始开发之前,我先把 Rails 部署的坑先踩了。之所以部署先行是因为之前 Django 部署把我坑惨了,导致之前写的 Django 代码还是 Github 静静地躺着。 忽悠妹子给我在腾讯云买了服务器后,马不停蹄的就开始了填坑之旅。这里我选择的系统是 Ubuntu 16.04 ,所以下面的命令以此为准。

<!--more-->

准备工作

在开始部署之前有些准备工作需要去完成,这些准备工作其实在每次开始新建服务器后你都要去做。

为了安全起见我一般习惯不使用密码登录服务器而是使用 SSH 的方式。所以第一步就是配置好服务器 SSH 证书并下载私钥并将其发到 .ssh 文件夹下,并修改私钥权限以防权限太大而无法登录。

代码语言:txt
AI代码解释
复制
$ chmod 400 ~.ssh/PathOfKey

接着我们 SSH 登录到服务器:

代码语言:txt
AI代码解释
复制
$ ssh -i "~.ssh/PathOfKey" ubuntu@119.xxx.xxx.xxx

完成登录后首先就是系统更新了:

代码语言:txt
AI代码解释
复制
$ sudo apt-get update
代码语言:txt
AI代码解释
复制
$ sudo apt-get upgrade

现在开发过程中 Git 服务几乎是必不可少的,为了更好的使用它需要对服务器 .ssh 文件夹进行设置:

代码语言:txt
AI代码解释
复制
$ sudo chown username: /home/username/.ssh 
代码语言:txt
AI代码解释
复制
$ sudo chown username: /home/username/.ssh/* 
代码语言:txt
AI代码解释
复制
$ sudo chmod 700 /home/username/.ssh  
代码语言:txt
AI代码解释
复制
$ sudo chmod 600 /home/username.ssh/

命令执行完成后,你就可以像往常一样配置 Github、Coding 这样的 Git 服务了。

软件环境配置

首先需要安装的就是 Ruby、Rails ,过程并没有太多的难度,具体说明可以参考 RubyChina。下面我仅仅列出使用到的命令:

安装 Ruby 版本控制器 RVM:

代码语言:txt
AI代码解释
复制
$ gpg --keyserver hkp://keys.gnupg.net --recv-keys 409B6B1796C275462A1703113804BB82D39DC0E3
代码语言:txt
AI代码解释
复制
$ \curl -sSL https://get.rvm.io | bash -s stable
代码语言:txt
AI代码解释
复制
$ source ~/.bashrc
代码语言:txt
AI代码解释
复制
$ source ~/.bash_profile

切换软件安装源:

代码语言:txt
AI代码解释
复制
$ echo "ruby_url=https://cache.ruby-china.org/pub/ruby" > ~/.rvm/user/db

安装最新的 Ruby、Rails

代码语言:txt
AI代码解释
复制
$ rvm install 2.4.0
代码语言:txt
AI代码解释
复制
$ rvm use 2.4.0 --default
代码语言:txt
AI代码解释
复制
$ gem install rails

接下来需要安装的就是 MySQL、Nginx ,过程常规没有什么值得说的。

代码语言:txt
AI代码解释
复制
$ sudo apt-get install nginx
代码语言:txt
AI代码解释
复制
$ sudo apt-get install mysql-server mysql-client libmysqlclient-dev
代码语言:txt
AI代码解释
复制
$ sudo mysql_secure_installation
代码语言:txt
AI代码解释
复制
$ sudo apt-get install nodejs

当然数据库完全依据个人偏好,你也可以选择 PostgreSQL。Nginx 安装好之后,你可以通过在浏览器中直接输入 IP 检测,默认会有一个欢迎页。

部署的过程

通过 Git 获取其他方式将代码拉取到服务器之后,接下来就是配置数据库文件并创建数据库了。因为不同系统和数据库配置存在差异,所以第一次配置的时候你可以通过在服务器上新建测试工程来拷贝其中的配置。

代码语言:txt
AI代码解释
复制
$ rails new testapp -d mysql

然后将配置文件 database.yml 中的 socket 字段配置信息拷贝到自己的代码中。另外需要通过配置生产环境的 secret_key_base,命令如下:

代码语言:txt
AI代码解释
复制
$  RAILS_ENV=production rake secret

然后将生成的随机字符串拷贝到 config/secrets.yml 中,当然你也可以将其作为 Shell 的环境变量。

创建数据库:

代码语言:txt
AI代码解释
复制
$  RAILS_ENV=production rails db:create
代码语言:txt
AI代码解释
复制
$  rails db:create

配置好数据库后就是拉起 Rails 了,但是此处有坑。

代码语言:txt
AI代码解释
复制
$ rails s 

在 Rails 5 中第一条拉起命令会出错,错误提示如:

initialize': Cannot assign requested address - bind(2) for "IP"

这是因为 Rails 5 已经是 IP V6 Only,而腾讯云默认是不开启的,所有需要我们手动修改设置。

代码语言:txt
AI代码解释
复制
$ cd /etc
代码语言:txt
AI代码解释
复制
$ sudo vim sysctl.conf

如果配置文件中存在下列设置将其注释掉:

代码语言:txt
AI代码解释
复制
net.ipv6.conf.all.disable_ipv6 = 1
代码语言:txt
AI代码解释
复制
net.ipv6.conf.default.disable_ipv6 = 1
代码语言:txt
AI代码解释
复制
net.ipv6.conf.lo.disable_ipv6 = 1

设置好之后重启服务让设置生效。

puma 设置

接下来我们需要将 puma 配置为生产环境,打开配置文件:

代码语言:txt
AI代码解释
复制
$ vim config/puma.rb

将其修改为:

代码语言:txt
AI代码解释
复制
# Change to match your CPU core count
workers 2

# Min and Max threads per worker
threads 1, 6

app_dir = File.expand_path("../..", __FILE__)
shared_dir = "#{app_dir}/shared"

# Default to production
rails_env = ENV['RAILS_ENV'] || "production"
environment rails_env

# Set up socket location
bind "unix://#{shared_dir}/sockets/puma.sock"

# Logging
stdout_redirect "#{shared_dir}/log/puma.stdout.log", "#{shared_dir}/log/puma.stderr.log", true

# Set master PID and state locations
pidfile "#{shared_dir}/pids/puma.pid"
state_path "#{shared_dir}/pids/puma.state"
activate_control_app

on_worker_boot do
  require "active_record"
  ActiveRecord::Base.connection.disconnect! rescue ActiveRecord::ConnectionNotEstablished
  ActiveRecord::Base.establish_connection(YAML.load_file("#{app_dir}/config/database.yml")[rails_env])
end

把workers的数量改为你的服务器的CPU核心的数量。上面给puma配置你应用的位置,Puma的socket、logs、PIDs的位置。可以自由修改这个文件,加入其他你需要的选项。

现在创建配置文件里引用到的目录:

代码语言:txt
AI代码解释
复制
$ mkdir -p shared/pids shared/sockets shared/log

接下来我们创建一个Upstart init script ,这样就能简单的开始和停止Puma,并确保在服务器启动时同时启动。

从 Puma GitHub库下载Jungle Upstart tool到你的home目录:

代码语言:txt
AI代码解释
复制
$ cd ~
代码语言:txt
AI代码解释
复制
$ wget https://raw.githubusercontent.com/puma/puma/master/tools/jungle/upstart/puma-manager.conf
代码语言:txt
AI代码解释
复制
$ wget https://raw.githubusercontent.com/puma/puma/master/tools/jungle/upstart/puma.conf

修改 puma.conf 文件指向服务用户和用户组,腾讯云默认都是 ubuntu

代码语言:txt
AI代码解释
复制
$ vim puma.conf

找到指定 setuid 和 setuid 的两行,然后用你的开发用户和组的名字替换。

代码语言:txt
AI代码解释
复制
setuid deploy
代码语言:txt
AI代码解释
复制
setgid deploy

拷贝 scripts 到 Upstart servives 目录:

代码语言:txt
AI代码解释
复制
$ sudo cp puma.conf puma-manager.conf /etc/init

新建 puma 的应用管理文件:

代码语言:txt
AI代码解释
复制
$ sudo vim /etc/puma.conf

文件里的每一行就是你希望puma-manager管理的一个应用的路径。现在加入你的应用的路径. 比如:

/home/ubuntu/apps/testapp

但是这里还有一个问题需要解决,在 Ubuntu 15.04 + 的系统中上面的管理脚本不会起重要所以我们还要进一步处理。

代码语言:txt
AI代码解释
复制
$ sudo apt-get install upstart-sysv
代码语言:txt
AI代码解释
复制
$ sudo update-initramfs -u
代码语言:txt
AI代码解释
复制
$ reboot

重启完成后服务就会生效,此时我们通过下列命令来拉起 Rails。

代码语言:txt
AI代码解释
复制
$ sudo restart puma-manager

然后你就可以在浏览器中通过 IP:3000 访问到程序了,接下来就是设置 Nginx 了。

Nginx 配置

下面我们设置 Nginx 进行反代理 puma,打开默认配置文件:

代码语言:txt
AI代码解释
复制
$ sudo vim /etc/nginx/sites-available/default

用下面的代码块替换文件内容。确定使用相应的用户名和应用名字替换 ubuntu 和应用路径部分

代码语言:txt
AI代码解释
复制
upstream app {
代码语言:txt
AI代码解释
复制
    # Path to Puma SOCK file, as defined previously
代码语言:txt
AI代码解释
复制
    server unix:/home/ubuntu/apps/testapp/shared/sockets/puma.sock fail_timeout=0;
代码语言:txt
AI代码解释
复制
}
代码语言:txt
AI代码解释
复制
server {
代码语言:txt
AI代码解释
复制
    listen 80;
代码语言:txt
AI代码解释
复制
    server_name localhost;
代码语言:txt
AI代码解释
复制
    root /home/ubuntu/apps/testapp/public;
代码语言:txt
AI代码解释
复制
    try_files $uri/index.html $uri @app;
代码语言:txt
AI代码解释
复制
    location @app {
代码语言:txt
AI代码解释
复制
        proxy_pass http://app;
代码语言:txt
AI代码解释
复制
        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
代码语言:txt
AI代码解释
复制
        proxy_set_header Host $http_host;
代码语言:txt
AI代码解释
复制
        proxy_redirect off;
代码语言:txt
AI代码解释
复制
    }
代码语言:txt
AI代码解释
复制
    error_page 500 502 503 504 /500.html;
代码语言:txt
AI代码解释
复制
    client_max_body_size 4G;
代码语言:txt
AI代码解释
复制
    keepalive_timeout 10;
代码语言:txt
AI代码解释
复制
}

这样HTTP请求通过Unix socket 抵达Puma应用服务器。随意修改配置到你感到满意为止。

重启Nginx使修改生效:

代码语言:txt
AI代码解释
复制
$ sudo service nginx restart

现在你的应用的生产环境已经可以通过你的服务器的公共IP地址或者FQDN访问了。要访问我们之前创建的Tasks controller,在web浏览器里面访问:

http://server_public_IP

你会看到和第一次测试时同样的页面,不过现在被架设在了nginx和Puma上。

总结

总的来说部署过程还算顺畅没有什么太大问题,后面再试试持续集成

原文地址

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

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

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

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

评论
登录后参与评论
暂无评论
推荐阅读
编辑精选文章
换一批
在Windows Mobile上使用WINCE自带数据库
    通过数据库,可以方便地存储和检索数据,极大地提高工作效率。在Windows CE .NET 4.2上,自带了一个数据库,具体我们可以参考MSDN上的网页:Microsoft Windows CE .NET 4.2 Database Reference。由于它最多只支持4种排序索引,这种数据库适合存储的数据量较小、数据结构相对简单的情况。它支持的数据类型包括2/4字节有/无符号整数、日期时间、Unicode字符串、CEBLOB、布尔和8字节有符号值。 数据库的主要操作包括以下几个方面: 装配数据库
ShiJiong
2018/01/11
1.7K0
在Windows Mobile上使用WINCE自带数据库
“零基础”学习WinCE开发
      Windows CE 是微软公司开发的一个针对小型设备(它是典型的拥有有限内存的无磁盘系统)的通用操作系统。主要用于嵌入式系统和移动终端设备上,操作界面和PC机上的WinXp系统比较类似,例如也是窗口化的操作界面,也具有磁盘资源管理器,文件系统和网络通讯协议和WinXp一样,程序开发也和WinXp环境下的程序开发。具体关于WinCE的介绍可以到网上搜索相关资料。个人的理解就是,WinCE可以看作一个精简后的WinXp系统,“麻雀虽小,五脏俱全”,在一些小型工控系统中可以发挥巨大的作用。
用户1170933
2022/05/10
1.5K0
“零基础”学习WinCE开发
Navi.Soft31.WinCE框架.开发手册(含下载地址)
1.概述 1.1应用场景 随着物联网的普及,越来越多的制造商对货品从原料配备,加工生产,销售出库等环节的要求和把控越来越高.在此情况之下,传统的ERP软件已经无法满足现有的操作流程. 移动设备的应用,在很大程度上弥补了传统ERP软件的不足,在物联网中,也起着非常重要的角色. 移动设备目前包括微软WinCE系统,谷歌的Android系统和苹果的IOS系统.Android和IOS系统目前在个人消费领域应用非常广泛,但在应用软件领域目前使用不多.WinCE系统出道较早,也属于名门之后.在此系统中开发的应用软件也很
用户1219352
2018/02/01
1.5K0
Navi.Soft31.WinCE框架.开发手册(含下载地址)
Battery Status on Windows Mobile
    大家知道,我们可以通过Start->Settings->Systems->Power来查看系统的电池情况,包括电池的类型,剩余的电量等等,如下图1所示: 图1:Windows Mobile自带
ShiJiong
2018/01/11
7910
Battery Status on Windows Mobile
在Windows Mobile上实现自动拼写和匹配建议
使用Windows Mobile手机的朋友,应该有一个体会,那就是要查找某个联系人,在输入目标联系人名字的过程中,系统会实时按照所输入的内容来筛选,呈现在列表中,供用户选择。同样,如果我们要直接拨打电话,在输入电话号码的过程中,系统也会实时地将输入的号码和联系人库进行比较,将匹配的联系人显示在列表中,供用户选择。     大家不要小看了这一个功能,其实,在设备小巧、需要花费大力气来处理输入和输出的嵌入式设备上,用户对UI的体验是至关重要的。在我看来,这个自动拼写建议是非常有用的,至少目前很多软件(诸
ShiJiong
2018/01/11
7900
在Windows Mobile上实现自动拼写和匹配建议
Windows Mobile Jump Start Guide
这篇文章是交给MSTC的作业,发上来和大家共享,希望对入门windows mobile平台开发的朋友有帮助。 1. Windows Mobile简介 Windows Mobile™ 是基于 Micro
ShiJiong
2018/01/10
1.5K0
Windows Mobile Jump Start Guide
Alpha Blending and Alpha Channel on Windows Mobile
      2007年的时候,Alex在《Compelling UI's in NetCF anybody?》一文中,讲述了windows mobile 5平台上如何利用AlphaBlend做很酷的透
ShiJiong
2018/01/11
1.1K0
Alpha Blending and Alpha Channel on Windows Mobile
Windows Mobile上的无线网络接入点扫描
  不用我多说,相信大家对于Wifi在手机上的重要性都有所认识。大家都希望能够在小巧的移动设备上实现高速移动互联网,和桌面PC的差距越小越好。   上个月,通信世界网抛出了一个“中国电信CDMA+Wi-Fi战略分析”的消息,称中国电信将在未来三年陆续投资800亿元资金用于升级、改造、优化CDMA网络,并采用CDMA + WLAN的组合方式,充分发挥CDMA与WLAN的组合优势,提供无缝的移动无线宽带上网服务,帮助中国电信迅速打开移动宽带市场。中国电信在南方21省做了大量Wi-Fi部署,计划到年底完成2.5万
ShiJiong
2018/01/11
9680
Windows Mobile上的无线网络接入点扫描
ZigBee On Windows Mobile--2.硬件和软件设计
    继续上一篇”ZigBee On Windows Mobile--1.背景和结构”,今天来讲讲硬件和软件设计。硬件设计主要是做ZigBee模块,输出文件一般包括原理图和PCB图。PCB图是最终给制板厂商的文件,制板厂商将PCB文件转化为Gerb文件进行PCB板加工。软件设计包括两部分,即ZigBee模块中的嵌入式程序和Windows Mobile端的应用程序,这两个软件模块运行在不同的平台之上,硬件上通过UART口进行通信。     硬件设计使用了比较传统的Protel99se,采用了MC1319
ShiJiong
2018/01/11
8410
ZigBee On Windows Mobile--2.硬件和软件设计
java通过jdbc连接SQL数据库(SQL2012举例)
首先,在连接数据库之前必须保证SQL Server 2012是采用SQL Server身份验证方式而不是windows身份验证方式。如果在安装时选用了后者,则重新设置如下:
Lcry
2022/11/29
1.6K0
使用Windows Embedded Source Tools for Bluetooth Technology简化蓝牙开发
“Windows Mobile上的蓝牙点对点通信”介绍如何在两台Windows Mobile设备上建立点对点的蓝牙通信,继续这个话题,WM6的SDK中,给出了另外一个蓝牙通信的例子,那就是SpaceWar2D。SpaceWar2D使用了Windows Embedded Source Tools for Bluetooth Technology来做蓝牙通信,在两台WM设备间建立连接,然后进行简单的游戏。       Windows Embedded Source Tools for Bluetooth Te
ShiJiong
2018/01/11
9040
使用Windows Embedded Source Tools for Bluetooth Technology简化蓝牙开发
IM over Socket Between Windows Mobile Devices
    在《利用WiFi在Windows Mobile上建立Ad-hoc网络》一文中,讲述了利用WiFi在Windows Mobile上建立Ad-hoc网络的方法,在Windows Mobile 6与Windows Mobile 2003se for Pocket PC给出了演示。那么,点对点的Ad-hoc网络能够完成什么功能呢?一方面,它可以用来消息的实时发送与接收,也就是俗称IM(Instant Messager);另一方面,可以用来传送文件。这篇文章先来讲讲如何利用Socket来实现Windows M
ShiJiong
2018/01/10
7890
IM over Socket Between Windows Mobile Devices
美化Windows Mobile上的自定义数据表
    前段时间做实验室项目,需要以报表的形式将数据展示给用户。首先想到的是visual studio自带的listview,用起来是比较方便,可是看着不美观,说白了,就是吸引力不够。于是,我想到了使用Alpha Blend来做一个半透明效果的表格。因为在今年2月份的时候,Alex Yakhnin做了一次名为《24 Hours of Windows Mobile Application Development: Creating Compelling and Attractive UIs for Windo
ShiJiong
2018/01/10
1.1K0
美化Windows Mobile上的自定义数据表
Endnote for Windows Mobile
  想必园子里有好多朋友都写过paper吧,在阅读文献的时候,是不是觉得管理文献这个事情很麻烦。我正处于刚刚起步的阶段,英语写译老师Greatlion给我们推荐了一款文献管理工具Endnote,在学校FTP上下载了Endnote X2.0.1。安装了以后,发现Endnote还提供了移动设备上的程序,特别是Windows mobile和Palm的版本。于是乎心里大喜,以后在我WM手机上又多了一项功能--参考文献学习。虽然在WM上看pdf格式的paper有点鸡肋,但是浏览Abstract之类的功能还是不错的,至
ShiJiong
2018/01/11
8740
Endnote for Windows Mobile
Qt配置使用VS2010进行开发
它包括跨平台类库、集成开发工具和跨平台 IDE。使用 Qt 您只需一次性开发应用程序,无须重新编写源代码,便可跨不同桌面和嵌入式操作系统部署这些应用程序。
阳光岛主
2019/02/19
1.7K0
pycharm中安装django_pycharm环境配置教程
原文转载自:http://www.cnblogs.com/hwtmhj/p/6746151.html
全栈程序员站长
2022/09/27
3.9K0
pycharm中安装django_pycharm环境配置教程
管理SQL Server 2008 数据库角色
角色是SQL Server 2008用来集中管理数据库或者服务器的权限。数据库管理员将操作数据库的权限赋予角色。然后,数据库管理员再将角色赋给数据库用户或者登录账户,从而使数据库用户或者登录账户拥有了相应的权限。 
幽鸿
2020/04/02
2.3K0
管理SQL Server 2008 数据库角色
人人网 Windows Phone 7 应用开发起步
        目前,人人网在国内高校学生中的普及率非常高。前段时间,大概是11月下旬的样子,人人网发布了Windows Phone 7客户端的公测版。我想,Windows Phone 7本地化的优劣,直接关系到其将来在国内的市场份额。而诸如人人等针对学生群体的SNS应用,也将影响到高校学生对WP7平台的认可程度。人人的WP7公测版大家可以去网站上下载,如果没有WP7设备,也可以通过SDK中的Application Deployment工具部署到模拟器上进行试用。这里给出WP7平台开发人人应用的相关流程。
ShiJiong
2018/01/10
6570
人人网 Windows Phone 7 应用开发起步
Java编程技术教程之Java开发入门
Java经过了多年的快速发展,成为了最受欢迎的开发语言之一,截至目前有超过400万以上的程序员在使用Java语言,现在的Java是第9个主要版本。
张哥编程
2024/12/19
2210
Java编程技术教程之Java开发入门
sql数据库打包部署安装
目的:在客户端服务器上”附加数据库文件”。 一).创建部署项目 1. 打开VS.NET2005。 2.在“文件”菜单上指向“新建项目”。 3. 在“新建项目”对话框中,选择“项目类型”窗格中的”其他项
阿新
2018/04/09
2.5K0
sql数据库打包部署安装
推荐阅读
相关推荐
在Windows Mobile上使用WINCE自带数据库
更多 >
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档