如果你是命令行爱好者,我想ssh应该是你用的最多的工具了,那么在windows有好的ssh client吗,个人用过下面三个client,总结下来,力荐 secureCRT ,
1, putty
download:
http://www.newhua.com/soft/2186.htm
比较简单 , 小巧, 免费 , 支持语法高亮, 单tab , 值得推荐, 适合服务器 机器不多的情况下使用 , 如果你需要同时连接 多个 电脑的话 , 那么用起来就麻烦了
2,ssh secure shell client
download:
http://www.onlinedown.net/soft/20089.htm
免费, 也是单标签 , 默认没有语法高亮 , 同时 带了 ssh 文件上传功能 , 如果你需要上传文件 , 又需要 命令行管理服务器 , 那么 ssh secure shell client 还是不错的
3,SecureCRT
download:
http://www.onlinedown.net/softdown/46646_2.htm
最后推荐secureCRT ,默认不支持 语法高亮, 杀手锏的是支持多标签和rz上传,sz下载功能,可以保存会话状态(密码), 还有就是不免费, 但是晚上破解版的 到处都是 , 下载后 更改 一些配置 ,例如,语法高亮等,配色, 用起来还是很
爽的。。。
centos 中的支持VIM高亮配置 和 中文乱码解决:
(1),在SecureCRT中设置 选项→会话选项→终端→仿真→终端:Linux,选中ANSI Color,全局设置的话,选择 选项→ 全局选项 设置即可
(2), 选项 → 会话选项 → 外观 修改字符编码为 UTF-8 (很重要,必须设置)
(3),
>vim /etc/vimrc syntax on # 添加语法高亮 开启 set encoding=utf-8 # 修改编码为 utf-8
服务器端是ubuntu的话 , CRT 使用 rz,sz 命令的话,必须安装 lrzsz
sudo apt-get install lrzsz
centos :
yum install lrzsz
mac:
>wget ftp://ftp.kfki.hu/pub/Sun/freeware/SOURCES/lrzsz-0.12.20.tar.gz >tar -zvxf lrzsz-0.12.20.tar.gz >cd lrzsz >./configure --prefix=/usr/local/lrzsz >make >make install >ln -s /usr/local/lrzsz/bin/lrz /usr/bin/lrz >ln -s /usr/local/lrzsz/bin/lsz /usr/bin/lsz
rz 上传到当前目录,sz下载到 user目录下 ,例如: C:\Users\Administrator\Downloads
SEE:
http://blog.s135.com/post/207/
http://tuhaitao.javaeye.com/blog/504919
NoSQL 渐渐火了起来,最近同事也在讨论这个问题,一不做,二不休,就学习了下,mongodb是采用C++写的,开源,免费,目前已经有公司(10gen)在背后提供商业支持,文件之小,windows下载二进
制包解压后是45M左右,linux下的就更小了,读写操作性能之高,即使是在大数据量,大并发的情况下,也能保持良好的性能,可以索性,例如可以结合memcached,sphinx使用,哇。。。cool。。。
这两天利用mongodb + sinatra 做了个短地址服务网址,当然只是自娱自乐一把而已,domain太ugly了,地址是 http://url.blog.wxianfeng.com,这编来介绍
rails中使用mongodb的入门教程,是railscasts上的那篇教程,但是有许多注意点,在此重点指出。
在开始这个demo前,如果你对mongodb还不熟的话,建议先学习下mongodb,就想先学习下mysql 一样,掌握一些基本的操作过程
我的环境:windows xp + rails 2.3.5 + mongodb 1.4.4 + mongo_mapper 0.8.2
1,安装需要的gem包
gem install mongo_mapper
如果顺利的话,可以安装成功,并且包依赖的其他gem也都同时安装上了 , 例如我在美国的linode服务器上,直接执行上面命令,就安装成功了,但是在大陆无法安装成功,至少我是经过下面的安装步
骤成功的:
gem install jnunemaker-validatable --source http://gemcutter.org gem install bson --source http://rubygems.org gem install mongo --source http://gemcutter.org gem install plucky --source http://gemcutter.org gem install mongo_mapper --source http://gemcutter.org
2,新建rails工程,修改你的enviroment.rb
config.gem "mongo_mapper",:source=>"http://gemcutter.org" config.frameworks -= [:active_record] # - 代表不加载 active_record
在这里需要注意,当你需要使用scaffold生成代码时,必须把 – 给去掉,来加载active_record,因为scaffold默认需要使用activerecord,当你开启server时,再把 – 号给加上
4,修改 database.yml
development: adapter: mysql encoding: utf8 reconnect: false database: trade_supplier_development # pool: 5 username: root password: root # socket: /var/run/mysqld/mysqld.sock host: localhost
需要保证mysql的username,和 password正确,还是为了能使用 scaffold
5,添加 配置,在 config/initializers 下新建 mongo_config.rb
MongoMapper.database = "todo-#{Rails.env}"
配置连接时的db name,start server时不会建立 db,当插入数据时会 同时建立 db 和 collection
6,修改Model
class Project include MongoMapper::Document key :name, String, :required => true key :priority, Integer many :tasks end
class Task include MongoMapper::Document key :project_id, ObjectId key :name, String key :completed, Boolean belongs_to :project end
核心部分就是Model部分,db中的字段是根据 key来动态改变的,没有shama,没有migrate,当你添加新的key时,原有的数据不会改变,上面的两个model是1对多的关系,例如mongo——mapper 可以来
实现 1对1,1对多,多对多的关系,并且和 activerecord操作非常之相像
7,启动 mongodb
进入mongodb bin 目录下
mongod.exe --dbpath E:/mongodb/data
8,启动server
thin start
这一步会提示安装 bson_ext gem包, 我在linux中安装成功了,在windows无法顺利安装,貌似只能在UNIX中安装,需要make编译,但是只要你安装bson包,程序都可以顺利跑起来,BSON是json的binary
形式,这样会节省存储空间,最重要的是减少网络消耗
9,ok
http://localhost:3000/projects 瞧瞧
DEMO源码下载:
http://www.uushare.com/user/fl1429/file/3274129
See:
http://asciicasts.com/episodes/194-mongodb-and-mongomapper
1,安装subversion
yum update yum install subversion
3,创建和配置代码仓库
cd /usr/local/system svnadmin create vcs # 配置工程 vim vcs/conf/svnserve.conf # 取消掉如下两行的注释 # auth-access = write # password-db = passwd # 配置该工作的用户与密码 vim vcs/conf/passwd [users] wxianfeng = 12345
4,启动svn server
cd /usr/local/system
svnserve -d -r vcs
5,导入工程
svn import blog.wxianfeng.com svn://173.230.155.150/blog.wxianfeng.com -m "first import" --username wxianfeng --password 12345 # 远程 或本机导入 svn import blog.wxianfeng.com file:///localhost/blog.wxianfeng.com # 本机导入
前面的blog.wxianfeng.com 是本地的文件夹,后面的blog.wxianfeng.com 是svn仓库的project name , 或者你可以借助netbeans,eclipse带的svn客户端直接导入netbeans中或eclipse中的project到svn仓库中
6,checkout项目
svn co svn://173.230.155.150/blog.wxianfeng.com
以上就可以做到一个仓库,多个项目的目的了,当有另外一个project时,直接import即可,如果想删除仓库中的某个工程,可以执行delete命令
svn delete svn://173.230.155.150/blog.wxianfeng.com -m "delete project"
See:
http://www.tonyspencer.com/2007/03/02/setup-a-subversion-server-in-4-minutes/
http://blog.itmem.com/archives/1207
这几天真是和phpmyadmin有缘啊,老是和他接触,今天又在我的linode VPS上搭建了个phpmyadmin,用来管理mysql数据库,装好后才猛然发现我的数据库中中文全部是乱码,但是rails读出来后是中文,也就是大家看到我现在的这个blog是中文,但是mysql里是乱码,看了下所有的编码都是utf-8形式,诡异的问题,这个问题比较棘手,必须解决。但是今天写的是 centos 5.5 上如何搭建phpmyadmin ,和其他系统的安装的大同小异
1,安装php
yum install php – enablerepo=centosplus
注意 – 和 enablerepo 之间有个空格 , 加上 – enablerepo=centosplus 为了安装到5.x的php,如果直接 yum install php 的话 , 则安装的是php 4.x 系列
以后更新php 可以执行下面的命令:
yum update php –enablerepo=centosplus
结束后 可以用 php -v 查看安装的版本信息
2,安装phpmyadmin
到phpmyadmin官网下载 phpmyadmin , 注意下载的版本 必须注意支持的mysql 和 php 版本
我用的是 2.1 版,安装和配置过程:
>cd /usr/local/system # 进入到该目录下,这个一般是我的工作目录,你可以任意指定 >wget http://downloads.sourceforge.net/project/phpmyadmin/phpMyAdmin/2.11.10/phpMyAdmin-2.11.10-all-languages.tar.gz?use_mirror=cdnetworks-kr-1&27689465 # 下载 phpmyadmin >tar -zvxf phpMyAdmin-2.11.9.5-all-languages.tar.gz # 解压 >mv phpMyAdmin-2.11.9.5-all-languages phpmyadmin # rename >cp config.sample.inc.php config.inc.php >vi config.inc.php $cfg['blowfish_secret'] = ‘TypeAnything_for_Secure’; # 找到 $cfg['blowfish_secret'] 值为后面的值 >vi /etc/httpd/conf.d/phpmyadmin.conf Alias /phpmyadmin /usr/local/system/phpmyadmin # 添加该代码
3,配置apache的端口
>vi /etc/httpd/conf/httpd.conf Listen:8080 # 修改Listen 端口为 8080
4,重启 apache
service httpd restart
>netstat -antup # 可以查看端口启动情况
5,访问phpmyadmin
http://localhost:8080/phpmyadmin
报错,php 不能加载 mysql 模块 ,因为 php 没有安装 mysql 扩展,安装之:
>yum install php-mysql - enablerepo=centosplus
再次访问 phpmyadmin .OK 成功了
tips:
登录phpmyadmin出现下面错误 #2002 Cannot log in to the MySQL server
修改config.inc.php 的localhost 为 127.0.0.1 即可
>vim config.inc.php
我的phpmyadmin地址:
http://blog.wxianfeng.com:8080/phpmyadmin
See:
https://www.sevenl.net/blog/how-to-install-lamp-phpmyadmin-and-vsftp-on-centos-5-3-using-yum/
http://imthi.com/blog/linux/install-or-update-php-5-on-centos.php
想让你的本地mysql数据库某个表迅速产生大量数据吗,例如 500 万条 , 来进行性能测试 , 我就遇到了这个情况 , 导入过程如下:
测试环境 : windows xp + mysql 5.1
myisam 引擎的表导入:
表结构如下:
members(id,name.password,city,created_at,updated_at)
id是int型,name,password,city 都是varchar型,created_at,updated_at 是 datetime类型,其中 city字段 有索引
1,关闭表的索引
ALTER TABLE members DISABLE KEYS;
关闭keys , 会在导入过程中对新的record不建索引,加快导入速度.
2,导入数据
load data infile 'E:/members.txt' into table members fields terminated by "," optionally enclosed by '"' lines terminated by "\r\n" (name,password,city,created_at,updated_at);
fields terminated by “,” 字段分隔符, lines terminated by “\r\n” 行分隔符, 注意windows下的默认行换行符是 \r\n ,UNIX 下的换行符是 \n , optionally enclosed by ‘"’ 对于 字符型字段 加双引号 , 不是指字符型的,例如int 则不加双引号
members.txt 文件内容形式:
"wxianfeng","wxianfeng","beijing","2010-06-30 00:07:45","2010-06-30 00:07:48" "kaili","kaili","suzhou","2010-06-30 00:07:45","2010-06-30 00:07:48"
最后 (name,password,city,created_at,updated_at) 指定依次导入的字段
那么 members.txt 又是怎么来的呢 , 你可以导出一个表瞧瞧就知道了 , 导出方法如下:
select * from members into outfile 'E:/members.txt' fields terminated by "," optionally enclosed by '"';
那么下面就是你有什么办法快速生成上面的 members.txt 了,我用ruby写了个脚本生成了 500 万条数据:
# members(name,password,city,created_at,updated_at) citys = %w(beijing shanghai guangzhou nanjing wuhan xihan hangzhou dalian jinan hefei) arr = ('0'..'9').to_a + ('a'..'z').to_a File.open("E:/members_1.txt","a+") do |file| 2_000_000.times do |ele| p "generate --- #{ele}" str = '' 5.times { |t| str << arr[rand(arr.size)] } time = Time.now.strftime("%Y-%m-%d %H:%M:%S") file.write("\"#{str}\",\"#{str}\",\"#{citys[rand(citys.size)]}\",\"#{time}\",\"#{time}\"\n") end end
最后生成 500 万条数据后 , 导入的速度非常之快 , 据官方介绍 load data infile 的方式是sql导入速度的20倍 ,快的根本原因我想应该还是生成的文件小,纯粹数据的形式,容易快速加载到内存里
3,再开启 KEYS
ALTER TABLE members ENABLE KEYS;
innodb 引擎表的导入:
1,导入前关闭表的唯一性校验
SET UNIQUE_CHECKS=0;
2,关闭自动提交
innodb型的表是事务安全的,每一条sql执行后都会自动提交,关闭后将会提交导入速度
SET AUTOCOMMIT=0;
3,导入数据
和之前 myisam 表的导入方式相同, 但是有一点不同的是,生成members .txt 数据的时候 ,把id也生成,因为innodb类型的表是按照主键顺序保存的,对于给定有序的文本,比没有顺序的要快的多
4,开启之前的 唯一性和事务自动提交功能
SET UNIQUE_CHECKS=1; SET AUTOCOMMIT=1;
最主要的还是要使用 load data infile 的导入方式,无论怎样, 你不要使用 单条 insert ,一条一条的插入, 这样网络io开销会巨大,速度很慢 , 实在不行,你应该构造 一个insert into 多个value的方式来导入 , 也会快很多,这个就是默认的mysqldump导出表数据所用的方法,还可以发现 在导入之前 , 它进行了锁表:
LOCK TABLES `members` WRITE; insert into members values (......),(......),(....) UNLOCK TABLES;
ref:
参考了 网易出的那本mysql书籍
以前部署app还是用很老套的ssh客户端,windows我使用 SSH Secure Shell Client , linux 上使用 Filezilla , 传代码非常之慢,今天体验下rails capistrano 自动部署 , 确实挺方便的 , 实现了ssh远程登录操作的一系列操作 , capistrano 的实现原理是 , 本地客户端 执行命令,实质进行了一系列远程操作,部署同步的根本是check 版本控制系统的最新版,版本控制系统可以是subversion,git等 , 我用的是 subversion,步骤:
我的环境;nginx + thin + capistrano 2.5.19 (客户端) + centos 5.5 + subversion
1,安装 capistrano
gem install capistrano
2,rails app加入 capistrano 配置文件
capify .
3,配置 config 下的deploy.rb ,最核心的东西都在这个文件里
set :application, "blog.wxianfeng.com" # 工程名, 随便写了 set :repository, "svn://173.230.155.150/blog.wxianfeng.com" # svn 地址 set :scm, :subversion # 使用 suversion版本控制 # Or: `accurev`, `bzr`, `cvs`, `darcs`, `git`, `mercurial`, `perforce`, `subversion` or `none` set :scm_username, 'wxianfeng' # svn 用户名 set :scm_password, '123456' #svn 密码 set :checkout, "export" # 使用export方式, svn版本信息不需要 track下来 role :web, "173.230.155.150" # 这三个填你服务器的ip地址 role :app, "173.230.155.150" # role :db, "173.230.155.150", :primary => true # # role :db, "your slave db-server here" set :deploy_to, "/usr/local/system/www/blog.wxianfeng.com" # 部署到remote 服务器路径 set :deploy_via, :remote_cache # 通过 remote_cache 方式部署 ,还有一种本地copy的方式 set :user, "root" # remote 服务器的用户名 set :runner, "root" # 同上 set :password, "123456" # 服务器的 root 密码 set :rake, "/usr/bin/rake" # 服务器上rake 命令path default_run_options[:shell] = false default_run_options[:pty] = true set :use_sudo, true # 允许使用 sudo namespace :deploy do task :start , :roles => :app do invoke_command "cd .." # invoke_command 是连到 服务器上执行的命令 invoke_command "thin start -C /etc/thin/thin.yml" end task :stop ,:roles => :app do invoke_command "killall thin" # or "thin stop -C /etc/thin/thin.yml" end task :restart, :roles => :app, :except => { :no_release => true } do #run "#{try_sudo} touch #{File.join(current_path,'tmp','restart.txt')}" invoke_command "cd .." invoke_command "thin restart -C /etc/thin/thin.yml -O" # -O 是onebyone(关一个,启一个) 启动thin ,注意是 大写 end desc "Symlink shared configs and folders on each release." task :symlink_shared do run "rm -rf #{release_path}/public/files" # 创建 软连接, 保证服务器上 图片的 同步 run "ln -nfs #{shared_path}/public/files #{release_path}/public/files" # or current_path run 等同于 invoke_command end end after 'deploy:update_code', 'deploy:symlink_shared' # 在 deploy:update_code 执行后 callback deploy:symlink_shared
以上当你执行 cap deploy 后 大体执行过程是 先 update_code 然后 deploy:symlink_shared 最后 deploy:restart 服务器 , 上面有一个thin的配置 /etc/thin/thin.yml,如果没有的话, 可以到服务器上生成:
thin config -C /etc/thin/thin.yml -c /usr/local/system/www/blog.wxianfeng.com/current -s 3 -e production -p 3000
4,部署
第一次部署需要运行下面的命令:
cap deploy:setup
报错:
sh: sudo: command not found
解决:
>vi /etc/sudoers # Disable "ssh hostname sudo <cmd>", because it will show the password in clear. # You have to run "ssh -t hostname sudo <cmd>". # #Defaults requiretty #将这行注释掉
这个命令会在服务器上配置好相关的目录结构.然后再运行:
cap deploy:check
检查通过
第一次部署用的命令是:
cap deploy:cold
以后部署都可以直接用:
cap deploy
修改 nginx 配置:
root /usr/local/system/www/blog.wxianfeng.com/current/public/;
修改 root 根目录为 cpistrano 的 current_path 的 public 目录
ok , 你以后更新代码 只需要 cap deploy 就ok了 , 前提是你先 commit 代码到 svn 服务器上 , 用capistrano好处还有一个可以 备份代码 , 因为每一次部署 其实就是相当于 track了svn版本里的最新代码
See:
http://gautamrege.wordpress.com/2009/11/10/capistrano-nginx-thin-deployment-on-linode/
http://weekface.info/2010/03/15/rails-git-capistrano
http://rustammamedov.wordpress.com/2009/12/27/capistrano-nginx-mongrel-deployment/