在CentOS5上用 rvm 部署Rails3应用
原地址:
http://railser.cn/blog/rails-on-centos-step-by-step
在CentOS5上用 rvm 部署Rails3应用
1、安装rvm
安装rvm前,要先安装git。因为rvm的安装教程就是一个git的小脚本。
>>wget http://kernel.org/pub/software/scm/git/git-1.7.5.3.tar.bz2
Oop!这里有个问题,我tar不常用,这里tar xvfz git-... 是会提出格式错误的,查了一下需要换一个命令:tar -xvjpf git-...
之后,
make prefix=/usr/local all
make prefix=/usr/local install
看到git 版本后,安装rvm
git --version
剩下的,就是按照 https://rvm.beginrescueend.com/rvm/install/ 的讲解一步步安装吧,最后,阿?为什么
type rvm | head -1
会提示错误呢?我也被搞糊涂了,按照提示,我重新打开一个终端窗口,这下正常了。所以再看看文档吧。
接着,安装1.8.7
2、安装ruby 1.8.7和gem
rvm install 1.8.7
注:我又将用户切换回了root,而在进行到Load RVM into your shell sessions as a function的时候,我不得不切换回user。
rvm use 1.8.7
显示正常了。
安装gems
http://rubygems.org/pages/download
3、安装rails
gem install rails -v 3.0.7 --no-rdoc --no-ri
如果安装rdoc和ri,我出现了问题,具体的情况未明。
问题又来了,>> rails -v 找不到命令
翻看文章的过程中,有一句话很重要,“gem install rails # 注意不要加sudo,否则会安到系统的ruby下,而不是rvm的ruby下”
这是在百度里查到的,可是不用root,rvm也没安装成功,还是我最开始忘记使用user,而在安装完rvm后,ruby也用了root权限安装。不知道这里的影响会有什么,总之,我犯了一个错误,版本搭配错误。
应该是 ruby1.9.2搭配rails3.0.7。
好吧,还好有rvm,安装ruby1.9.2,再 gem install rails,竟然没有出现第一次时候的 ri 错误。欣慰吧。
这里还有一些细节,不影响整体即可,现在 rails new testrails 成功创建了一个应用。
4、安装svn
曾经熟悉的svn页面,已经转移到 apache 下,地址在这,http://subversion.apache.org/ ,用户手册在 http://svnbook.red-bean.com/ 。
按照一些文章介绍,安装svn实在太复杂了,突然我想起来yum和apt-get。来试一下。
yum install subversion
成功了。
按照这个文档,我配置过两次,这里不再详述了,又需要的朋友看一下。
我每次都会参照它ignore的操作。
5、ssh配置
在我本地重新生成一个key,其实没必要的,我只是出于练习的目的。
>> ssh-keygen -t rsa
在服务器上
>> mkdir .ssh (其实没太大必要了,因为我的key不打算放到这里了)
然后传输这个key上去
>> scp ~/.ssh/id_rsa.pub loginname@hostdomain:.ssh/authorized_keys
这里把key命名为authorized_keys。按照一些教程的说明,综合起来简单笔记一下。
在/etc/ssh/<username>建立文件夹,将authorized_keys mv进来,并给予权限
>> chmod 755 <username>
>> chmod 644 <username>/authorized_keys
编辑/etc/ssh/sshd_config,改写这一行
AuthorizedKeysFile /etc/ssh/%u/authorized_keys
并取消注释这两行
RSAAuthentication yes
PubkeyAuthentication yes
保存后,
>> /etc/init.d/sshd restart
启动另一个终端,登录时弹出一个窗口提示输入密码,其实就是刚才生成key时候的passphrase。确认后,就不用输入密码直接登录了。
这里有一个调试经验。
>> ssh -v name@domain
会输出交互信息,这里我发现它先校验key,如果不通过,就校验登录密码了。所以,如果上面的任何一个步骤有问题,比如权限不对或者写错字母,这里就会继续提示需要密码。
如果上面的都正确了,这时就不用再次输入密码直接登录了。
感谢这篇文章,让我节省了如此多的时间。感谢分享的精神。
接着需要提高一些安全性了,常见的有
PermitRootLogin no (禁止用root登录,这是默认的,当然有些时候会被其他的开发人员打开,检查一下是必要的)
StrictModes yes (也是默认的)
PasswordAuthentication no (禁用密码登录,加上这个安全性就足够了,当然还有其他,欢迎各位指点。)
时间过去了一个星期,这期间我在调试一个Rails程序,打算下面部署到服务器上,而不是随便用个railstest应付了事。这里又温习了很多rails得技巧,不过时间好快,一下子就是8天的时间。
好了,我的Rails程序已经基本完成小样了,开始用capistrano设置。
6、Capistrano
这里稍微特殊一些的地方,是我用的svn+ssh(注意顺序,写反了不行)链接服务器并cap命令。这里没有办法证明一件事情,写出来供大家参考,就是私钥设置完,在服务器上也测试一下,比如
svn checkout -q -r5 svn+ssh://domain.com/test/trunk tmp
这里会要求输入passphrase,或者添加host到know_host,都可能潜在的影响第一次cap的成功。当然,第一次cap失败可能是必然的,关键是下面分享一下我的deploy.rb给大家参考,减少一些查询的时间,当然很多东西还得看过说明才了解,建议看这篇文章,很有帮助。
下面是我的代码
(略过)
在配置svn的时候,会有不同的权限设置,比如网站目录会放到/var/www/中,我觉得这是安全性的问题,超过这个笔记的范围,就不记述了。不过这其间还是看了一些文章,后面做安全调整的时候会用上的。
补充几个命令
cap -H 查看帮助
cap -T 查看任务,-vT查看更多任务
cap -e deploy:cold 查看deploy:cold 的说明
7、apapche,nginx和passenger
因为CentOS上的apache已经安装好了,所以这里只要安装一下passenger就可以了,安装起来竟然无比简单,缺少的lib按照提示yum一下就可以了。
8、安装sqlite3-ruby的问题
google了一下发现很多人安装这个出现问题,yum install sqlite3-ruby 也不可以,这里很奇怪,yum竟然找不到这个包。
省去一些步骤,直接 yum search sqlite, 发现给出的包有:
原来是包的名称不对,所以
yum install sqlite.i386
提示已经安装
yum install sqlite-devel.i386
安装成功,再次 gem install sqlite3,提示
sqlite3-ruby only supports sqlite3 versions 3.6.16+, please upgrade!
好,可算有了进展。下载 http://www.sqlite.org/download.html 最新版本的sqlite,安装后,再次 gem install sqlite3,成功了!!
回到rails目录,再次 bundle install。胜利完成。
9、rake任务出错,/lib/rake.rb:32: warning: already initialized constant RAKEVERSION
临时的解决办法,bundle exec rake RAILS_ENV=production db:migrate
这不是最终解决办法,还在找,刚才心急一下给发布了,其实还没写完呢。。
问题发现了,是rake的问题,卸载之后重新安装rake 0.8.7,问题暂时解决。
10、No such file or directory - /tmp/mysql.sock
CentOS的位置和方法,在此备注,ln -s /var/lib/mysql/mysql.sock /tmp/mysql.sock
11、invalid packet: sequence number mismatch(3 != 1(expected))
说是ruby-mysql2.9.4的问题,暂时使用2.9.3。但是问题依旧。
gem 'mysql2', '0.2.7' 和gem 'mysql'的区别
最新版本的mysql2,是0.3.2,这是集成进rails3.1的,不适用于rails3.0.7,所以需要指定版本为0.2.7,环境可以为Raisl 3.0.x和mysql 5.x
gem 'ruby-mysql'和gem 'mysql-ruby'的区别:都不用了,直接用 gem 'mysql'
“invalid packet: sequence number mismatch”的问题已经解决,去掉ruby-mysql的gem,直接使用 gem 'mysql'
在我的版本环境里,gem 'mysql2'也不行,我的环境,rvm, ruby1.9.2p180, rails 3.0.7
12、rake 0.9.2和0.8.7,会被同时安装,也会因为0.9.2产生问题,建议删除0.9.2
13、自动执行rake任务
看了一些介绍,其实总结起来是三个事情
(1)参照系统默认的crontab任务,这方面资料很多
(2)rails的好处是gem和实现方案很多,建议使用 whenever 来实现,它会直接提示代码如何写,粘贴到当前用户的crontab里就可以
(3)具体做法,
>> crontab -e 编辑当前用户的cron任务
>> */30 * * * * /bin/bash -l -c 'cd /home/liwei/wwwroot/appflying.com && RAILS_ENV=production rake autorss:work --silent'
其实这个文件就这一行就可以,我完整的代码是
SHELL=/bin/bash
PATH=/sbin:/bin:/usr/sbin:/usr/bin:/usr/local/rvm/gems/ruby-1.9.2-p180@global/bin
MAILTO=root
HOME=/home/liwei
*/30 * * * * /bin/bash -l -c 'cd /home/liwei/wwwroot/appflying.com && RAILS_ENV=production rake autorss:work --silent'
写在最后:算是大功告成??其实我没感觉,但是总算把我想写的内容写完了。后面还会有一些笔记。这个笔记到此用了2周时间,留念。
在CentOS5上用 rvm 部署Rails3应用相关推荐
- Centos5上firefox的升级
Centos5上firefox的升级 默认Centos5上firefox的版本是1.5 当我们使用yum update firefox 提示到的版本还是1.5 可是我们在使用1.5版本的firefo ...
- Win2008上.NET4.0部署出错HTTP 错误 500.21 - Internal Server Error的解决方法
Win2008上.NET4.0部署出错HTTP 错误 500.21 - Internal Server Error的解决方法 参考文章: (1)Win2008上.NET4.0部署出错HTTP 错误 5 ...
- Ubuntu 14.04 上使用 Nginx 部署 Laravel 4.2
http://laravel.lapland.name/post/102090021035/how-to-install-laravel-with-an-nginx-on-ubuntu-14-04 U ...
- Ubuntu Server 16.04 LTS上使用Docker部署Tomcat修改为80端口
场景 Ubuntu Server 16.04 LTS上使用Docker部署Tomcat: https://blog.csdn.net/BADAO_LIUMANG_QIZHI/article/detai ...
- 【附代码】如何在私有链上编写、部署与以太坊进行交互的智能合约
原文:How To Write, Deploy, and Interact with Ethereum Smart Contracts on a Private Blockchain 作者:jack ...
- 初探在容器上构建持续部署!
作者 | 倚天码农 责编 | 徐威龙 封图| CSDN下载于视觉中国 要想理解持续集成和持续部署,先要了解它的部分组成,以及各个组成部分之间的关系.下面这张图是我见过的最简洁.清晰的持续部署和集成的关 ...
- 如何在Azure上创建和部署云服务
Azure 管理门户提供两种方法可用来创建和部署一个云服务:快速创建和自定义创建. 本主题说明如何使用快速创建方法来创建新的云服务,然后使用上传来上载和部署一套在 Azure 的云服务.当您使用此方法 ...
- 在PDA设备上安装和部署 SQL Server Compac 3.5(官方版)
Microsoft Visual Studio 2008 Service Pack 1 (SP1) 是用来为 Microsoft SQL Server Compact 3.5 开发智能设备应用程序的首 ...
- Redis在CentOS 7上的安装部署
http://www.linuxidc.com/Linux/2017-05/143312.htm 不能更赞了 简介: Redis是一种高级key-value数据库.它跟memcached类似,不过 ...
- k8s上使用流水线部署应用
k8s上使用流水线部署应用 1. 部署流程 为每一个项目准备一个Dockerfile:Docker按照这个Dockerfile将项目制作成镜像 为每一个项目生成k8s的部署描述文件 Jenkins编写 ...
最新文章
- C++中 gets()函数
- python处理csv数据-python 数据处理 对csv文件进行数据处理
- 5门可能衰落的编程语言
- Spring Boot基础学习笔记11:Spring MVC
- 开发到底要不要自己做测试?
- 7号团队-团队任务5:项目总结
- Android开发---开发文档翻译
- 最全“Java面试宝典+Java核心知识集”
- 【架构】高可用高并发系统设计原则
- 2021年中国研究生数学建模竞赛F题航空公司机组优化排班问题思路参考代码
- 贝叶斯分析好坏_高人进,关于贝叶斯估计的几个重要问题!
- pdf所有者和计算机怎么删除,如何修改PDF文件以及如何删除一页
- 【案例24】NC6.3-6.3X前台无法录spr日志
- 揭秘:全球第一张云安全国际认证金牌得主
- 【行业应用案例】区块链+珠宝应用案例分析
- 理解modle下的gradle
- 怎样将pdf压缩得很小?如何把pdf压缩到最小?怎么把pdf压缩到最小?如何把pdf文档压缩变小?怎么将pdf文档压缩至更小?怎么把pdf压缩到最小方法软件网站有哪些?
- 图像的平均梯度AG,信息熵IE,峰值信噪比PSNR,平均值,SSIM(matlab)
- 栈的应用之后缀表达式(逆波兰表达式)求值
- 如何有效地进行代码 Review