【Ruby on Rails全栈课程】5.3 项目上线--git部署项目

简介: 1、git分布式版本控制系统是什么?现在本地电脑1有一套data_system的代码,如果想把这套代码放到云服务器上,应该怎么做呢?最简单的做法是直接将本地电脑1上的代码拷贝到服务器上。但是我们拷贝完成后发现了一个bug1,在本地电脑1的代码中修复了之后。需要与云服务器上的代码同步,还是要将本地电脑1的代码拷贝到服务器上吗?团队的另一个人修改了bug2,没有修改bug1,他如果将自己本地电脑2的代码拷贝到服务器上,就会将你刚刚修改的bug1代码覆盖掉。所以我们现在需要一个第三方先将代码处理整合一下,将我们自己的代码与团队其他人的代码整合起来,再通过git pull操作将整合后

1、git分布式版本控制系统是什么?


现在本地电脑1有一套data_system的代码,如果想把这套代码放到云服务器上,应该怎么做呢?


最简单的做法是直接将本地电脑1上的代码拷贝到服务器上。


但是我们拷贝完成后发现了一个bug1,在本地电脑1的代码中修复了之后。需要与云服务器上的代码同步,还是要将本地电脑1的代码拷贝到服务器上吗?


团队的另一个人修改了bug2,没有修改bug1,他如果将自己本地电脑2的代码拷贝到服务器上,就会将你刚刚修改的bug1代码覆盖掉。


所以我们现在需要一个第三方先将代码处理整合一下,将我们自己的代码与团队其他人的代码整合起来,再通过git pull操作将整合后的代码下拉到云服务器上。


git就是这样一个第三方的工具。帮助我们更简单的实现多个平台代码同步,以及多个开发者的代码冲突等问题。我们画个图了解一下工作流程:


image.png


2、git基本操作


git add filename


将本地修改的文件,添加到缓存


git commit -m ‘Cloudox commit’

git add 命令是将代码添加到缓存区中,git commit将缓存区中的内容添加到仓库中。-m后面跟注释信息,备注本次提交的修改,方便以后维护。


git push origin master

将本地仓库中的内容,提交到远程master分支上(即github库中的master分支)


git pull origin master

将远程master分支上的代码下拉下来


这几个命令是我们下面课程中较常用到的,如果你是新手,不理解也很正常,多操作几次就熟练了。git其他具体的操作可以在网上找课程学习一下,这个不是我们课程的重点,就不展开讲了。


3、通过git部署项目


(1)先通过github创建一个用来保存代码的仓库


登录github网站https://github.com/,注册登录一下。


登录后,点击右上角的头像,点击下拉菜单中的Your repositories


image.png


会进入下面页面,我们再点击new按钮新建一个仓库(repositories)



image.png


填写Repository name为我们项目的名称data_system,选择Public。点击create repository按钮完成创建


image.png



4、github仓库认证本地SSH key


本地Git仓库和GitHub仓库之间的传输是通过SSH加密的,所以必须要让github仓库认证本地电脑的SSH key。我们需要在本地生成SSH key


(1)登录vagrant,基于本全栈课程–宠物论坛项目,如果你只是根据本节学习git项目部署,不用登录vagrant。


xuzhaoning@xuchaoningdeMacBook-Air:~$ vagrant up
xuzhaoning@xuchaoningdeMacBook-Air:~$ vagrant ssh


(2)打开项目目录,运行ssh-keygen -t rsa -C 注册github用的邮箱来生成SSH key


//打开项目目录
vagrant@vagrant-ubuntu-trusty-64:~$ cd /vagrant/data_system
//生成SSH key
/vagrant/data_system$ ssh-keygen -t rsa -C 注册github用的邮箱
//系统返回信息
Enter file in which to save the key (/home/vagrant/.ssh/id_rsa):
Enter passphrase (empty for no passphrase):  //直接回车即可,无需设置密码
Enter same passphrase again: //同上
Your identification has been saved in /home/vagrant/.ssh/id_rsa.
//显示生成的SSH key保存到了/home/vagrant/.ssh/id_rsa.pub文件中
Your public key has been saved in /home/vagrant/.ssh/id_rsa.pub.
The key fingerprint is:
************加密******************
The key's randomart image is:
+--[ RSA 2048]----+
|      ooo        |
|     o o.        |
|    ..E.         |
|     .+..+       |
|     =ooS        |
|    ..+          |
|   o.  .         |
| ..+o.           |
|  oo oo.         |
+-----------------+


(3)根据系统返回信息我们得知刚刚生成SSH key保存到了/home/vagrant/.ssh/id_rsa.pub文件中,我们执行cat /home/vagrant/.ssh/id_rsa.pub查看文件,并将文件中保存的密码复制下来(文件中所有的内容都有复制,不要落了第一行以及后面的邮箱)


/vagrant/data_system$ cat /home/vagrant/.ssh/id_rsa.pub
//复制下面信息
ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABAQC6Vh5Dm+gHhRK8MmZx5DeuJPCBNkylrEp/v2F0QZgpBl4I24DWHHXKS0duS5BV4VKdUiBH3O45rcwyP9GZCUgkvp87bCm7NOZ39q7NNMQXFTO+trFBc6uy8F79AUT6bM3H+vdq2W6lXX8eFN88RZfZMJbZ1mf3X9p8RkpDK2GgJ85h18aMIN58FT/fqpJ7j8oZ3tMdtt0WI3H7eEBZjYShSiwT7Bq4v9VoEe4Kg1UIH1Ow/1hiohnyTxPe+iuDxBQmgreLv0jJszRbVgmxNcNbnjVNjvFoTzMSfycqTwSZhGKL/f6fyw4q8loyFSvLBFGkmMg+Tm/DRUUCuGM+uRYD 1369822836@qq.com

(4)点击右上角头像—settings—SSH and GPG keys–new粘贴密码

或直接点击链接https://github.com/settings/ssh/new粘贴密码


image.png


image.png


5、将本地项目上传到github仓库中


(1)第一次上传代码需要设置自己的邮箱和名称

邮箱建议填写github的注册邮箱


名称建议填写自己名称的全拼或者首拼


/vagrant/data_system$ git config --global user.email 你的邮箱
/vagrant/data_system$ git config --global user.name 你的名称


(2)运行git remote add origin git@github.com:********.git将本地仓库与github仓库关联,只是第一次上传代码需要这样操作。git@github.com:********.git链接需要替换成自己刚刚创建的github仓库的ssh链接


/vagrant/data_system$ git remote add origin git@github.com:********.git


下面我们来获取一下github仓库的ssh链接


点击进入我们的仓库页面,https://github.com/Sherozn?tab=repositories,进入本项目的github远程仓库中


image.png

再点击Clone or download按钮,选择Use SSH


image.png


复制红框里的链接,添加到git remote add origin后面



image.png


(3)将代码提交到本地的仓库


/vagrant/data_system$ git add .
/vagrant/data_system$ git commit -m "first"


(4)将本地仓库中的代码提交到github的远程仓库中


/vagrant/data_system$ git push -u origin master
#系统返回信息
Counting objects: 161, done.
Compressing objects: 100% (148/148), done.
Writing objects: 100% (159/159), 101.69 KiB | 0 bytes/s, done.
Total 159 (delta 16), reused 0 (delta 0)
remote: Resolving deltas: 100% (16/16), completed with 1 local object.
To [git@github.com](mailto:git@github.com):Sherozn/data_system.git
   653badd..f98de7a  master -> master
Branch master set up to track remote branch master from origin.


可能出现错误


错误出现原因是远程仓库有新的更新没有下拉,我们需要先进行git pull 操作


Warning: Permanently added the RSA host key for IP address '13.229.188.59' to the list of known hosts.
To [git@github.com](mailto:git@github.com):Sherozn/data_system.git
! [rejected]        master -> master (fetch first)
error: failed to push some refs to 'git@github.com:Sherozn/data_system.git'
hint: Updates were rejected because the remote contains work that you do
hint: not have locally. This is usually caused by another repository pushing
hint: to the same ref. You may want to first integrate the remote changes
hint: (e.g., 'git pull ...') before pushing again.
hint: See the 'Note about fast-forwards' in 'git push --help' for details.


解决方法


#先运行git pull origin master将远程库中更新的代码下拉到本地
/vagrant/data_system$ git pull origin master
#系统返回信息
warning: no common commits
remote: Enumerating objects: 3, done.
remote: Counting objects: 100% (3/3), done.
remote: Compressing objects: 100% (2/2), done.
Unpacking objects: 100% (3/3), done.
remote: Total 3 (delta 0), reused 0 (delta 0), pack-reused 0
From github.com:Sherozn/data_system
* branch            master     -> FETCH_HEAD
* [new branch]      master     -> origin/master
Auto-merging .gitignore
CONFLICT (add/add): Merge conflict in .gitignore
Automatic merge failed; fix conflicts and then commit the result.
#再重新进行git commit操作
/vagrant/data_system$ git commit -m "first"
#系统返回信息
[master f98de7a] first
#最后将代码提交到远程库
/vagrant/data_system$ git push -u origin master


6、将github远程库中的代码下拉到云服务器上。


(1)ssh登录云服务器,新建并且打开项目文件


ubuntu@VM-16-15-ubuntu:~$ mkdir data_system
ubuntu@VM-16-15-ubuntu:~$ cd data_system


(2)在刚刚创建的data_system目录下运行 ssh-keygen -t rsa -C 注册github用的邮箱将生成SSH key,与本地生成SSH key相同的操作,我们再来示范一下

ubuntu@VM-16-15-ubuntu:~/data_symtem$ ssh-keygen -t rsa -C 注册github用的邮箱


ubuntu@VM-16-15-ubuntu:~/data_symtem$ ssh-keygen -t rsa -C 注册github用的邮箱
//系统返回信息
Generating public/private rsa key pair.
Enter file in which to save the key (/home/ubuntu/.ssh/id_rsa):
Enter passphrase (empty for no passphrase):
Enter same passphrase again:
Your identification has been saved in /home/ubuntu/.ssh/id_rsa.
Your public key has been saved in /home/ubuntu/.ssh/id_rsa.pub.
The key fingerprint is:
***************加密*****************
1369822836@qq.com
The key's randomart image is:
+---[RSA 2048]----+
|      . o        |
|     o * + .     |
|    o O + +      |
|   . . B   o E . |
|    .   S. ...o  |
|     . . .o + =. |
|      o ..o  X ..|
|     . .+  =+ =..|
|     .oo*=+==o.  |
+----[SHA256]—————+


打开保存SSH key的文件,复制SSH key,点击右上角头像—settings—SSH and GPG keys—new将云服务器的SSH key再添加到github中,注意Title最好不要跟刚刚添加本地电脑SSH key的Title重复


ubuntu@VM-16-15-ubuntu:~/data_symtem$ cat /home/ubuntu/.ssh/id_rsa.pub
#复制下面信息粘贴到github保存SSH key的页面
ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABAQDCKL0MGoJnVk5Ecc+GWe02GYkvXKRN9hnWcuxGjt1k4fd9sIuICaLQKf4QZubYfH/PyzKp2J+BOS7Gj7IYLz/++hpP0lgf43GOOblVaNLQKV8sbpvmne0XIBIi5SC+VzkIMmgf0PLpoL8/5Xx7L/fabHyOBse0iXgl7yY+Tj1nKEavN/E/RQVng7YU2HDQCvv/Q/ukWT+Xqit9QEb8DahAq6JEYw/JSWldv2YAyDNny/HvmgFzOo/hohXxrqwvlE9/Jy+EPF+xK2SVOwtSTNsgbx+iVrUG/XDYkpTWgbeO30W+cPfwcpCWVxni+kxYU+VOpyUYjJVafPg1uQ24tz [1369822836@qq.com](mailto:1369822836@qq.com)


(3)git pull下拉代码


#将云服务与github仓库关联
ubuntu@VM-16-15-ubuntu:~/data_symtem$ git remote add origin git@github.com:******************
#系统返回信息报错,缺少.git文件。那我们需要先执行一下git init
fatal: Not a git repository (or any of the parent directories): .git
#执行git init
ubuntu@VM-16-15-ubuntu:~/data_symtem$ git init
#系统返回信息
Initialized empty Git repository in /home/ubuntu/data_symtem/.git/
#再重新运行git remote
ubuntu@VM-16-15-ubuntu:~/data_symtem$ git remote add origin git@github.com:******************
#将代码下拉到云服务器上
ubuntu@VM-16-15-ubuntu:~/data_symtem$ git pull origin master
#系统返回信息
The authenticity of host 'github.com(52.74.223.119)' can't be established.
RSA key fingerprint is SHA256:nThbg6kXUpJWGl7E1IGOCspRomTxdCARLviKw6E5SY8.
Are you sure you want to continue connecting (yes/no)? yes
Warning: Permanently added 'github.com,52.74.223.119' (RSA) to the list of known hosts.
remote: Enumerating objects: 162, done.
remote: Counting objects: 100% (162/162), done.
remote: Compressing objects: 100% (134/134), done.
Receiving objects: 100% (162/162), 102.81 KiB | 51.00 KiB/s, done.
Resolving deltas: 100% (16/16), done.
remote: Total 162 (delta 16), reused 160 (delta 16), pack-reused 0
From [github.com:Sherozn/data_system](http://github.com:Sherozn/data_system)
* branch            master     -> FETCH_HEAD
* [new branch]      master     -> origin/master


(4)测试,查看云服务上的代码


执行ls,出现以下目录,说明项目已经部署完成


ubuntu@VM-16-15-ubuntu:~/data_symtem$ ls
#系统返回信息
app  config     data_system  Gemfile       lib  package.json  Rakefile   test  vendor
bin  config.ru  db           Gemfile.lock  log  public        README.md  tmp
相关实践学习
2分钟自动化部署人生模拟器
本场景将带你借助云效流水线Flow实现人生模拟器小游戏的自动化部署
7天玩转云服务器
云服务器ECS(Elastic Compute Service)是一种弹性可伸缩的计算服务,可降低 IT 成本,提升运维效率。本课程手把手带你了解ECS、掌握基本操作、动手实操快照管理、镜像管理等。了解产品详情: https://www.aliyun.com/product/ecs
目录
相关文章
|
2月前
|
开发工具 git C++
【App Service】VS Code直接部署App Service时候遇见 “fatal: not a git repository (or any of the parent directories): .git”
通过VS Code发布Python App Service的时候,遇见了发布失败错误: The deployment failed with error: fatal: not a git repository (or any of the parent directories): .git . Please take a few minutes to help us improve the deployment experience
80 24
|
2月前
|
Java Shell 开发工具
git集成IDEA,托管项目实现版本管理
git集成IDEA,托管项目实现版本管理
33 0
|
4月前
|
存储 Linux 开发工具
【Azure App Service】本地Git部署Python Flask应用上云(Azure App Service For Linux)关键错误
【Azure App Service】本地Git部署Python Flask应用上云(Azure App Service For Linux)关键错误
|
4月前
|
Linux 开发工具 git
【应用服务 App Service】App Service使用Git部署时,遇见500错误
【应用服务 App Service】App Service使用Git部署时,遇见500错误
|
4月前
|
架构师 开发工具 git
项目去除git版本控制 去除版本控制
文章提供了去除本地项目Git版本控制的步骤,包括删除`.git`文件夹和`.idea`目录下的`vcs.xml`文件。
项目去除git版本控制 去除版本控制
|
4月前
|
前端开发 测试技术 API
揭秘Ruby on Rails的神秘力量:如何让你的Web应用飞起来?
【8月更文挑战第31天】Ruby on Rails(简称RoR)是一个基于Ruby语言的开源Web应用框架,自2005年发布以来,因简洁的语法、强大的功能和高效的开发效率而广受好评。RoR采用MVC架构,提高代码可读性和可维护性,拥有庞大的社区和丰富的库支持。本文通过示例代码展示其强大之处,并介绍RoR的核心概念与最佳实践,帮助开发者更高效地构建Web应用。
47 0
|
4月前
|
前端开发 API C++
在Ruby世界中寻找你的Web框架灵魂伴侣:Rails vs Sinatra
【8月更文挑战第31天】在Ruby的世界里,选择Web框架如同挑选衣物,需根据场合和需求。Rails与Sinatra是两大热门框架,前者以其“约定优于配置”理念和全面的功能成为企业级应用的首选;后者则以轻量级和灵活性著称,适用于快速原型开发和小规模应用。通过对比两者特性,如Rails的MVC架构与Sinatra的简洁API,我们可以看到它们各有所长。选择合适的框架,如同找到旅途中的最佳伙伴,让开发之路更加顺畅愉悦。这场探索之旅教会我们,没有绝对的好坏,只有最适合的选择。
38 0
|
4月前
|
安全 前端开发 数据安全/隐私保护
如何在Ruby on Rails中打造坚不可摧的OAuth认证机制
【8月更文挑战第31天】在构建现代Web应用时,认证与授权至关重要。本文介绍如何在Ruby on Rails中实现OAuth认证,通过使用`omniauth`和`devise` gems简化流程。首先安装并配置相关gem,接着在`User`模型中处理OAuth回调,最后设置路由及控制器完成登录流程。借助OAuth,用户可使用第三方服务安全地进行身份验证,提升应用安全性与用户体验。随着OAuth标准的演进,这一机制将在Rails项目中得到更广泛应用。
52 0
|
4月前
|
开发工具 git
【Azure 应用服务】App Service 开启了私有终结点(Private Endpoint)模式后,如何来实现公网Git部署呢?
【Azure 应用服务】App Service 开启了私有终结点(Private Endpoint)模式后,如何来实现公网Git部署呢?
|
4月前
|
Java 开发工具 git
【Azure 应用服务】本地Git部署Java项目到App Server,访问无效的原因
【Azure 应用服务】本地Git部署Java项目到App Server,访问无效的原因