Test Capistrano Rails Auto Deploy at Mac Pro

princy | January 7th, 2012 - 11:51:33

0. 安装Xcode和早期开发环境配置

0.1安装Xcode

  • Xcode默认有Ruby,SVN,SSH,Apache等各种开发相关程序
  • 比较早的版本可以从MacOX的随机盘里面找到Xcode的安装文件,或者可以从下面的苹果的开发中心那里下载Xcode来安装 (http://developer.apple.com/devcenter/mac/index.action)

0.2设定SSH,Apache

SSH和Apache都可以从苹果系统的系统环境设置里面的共享来选择开启SSH服务器和Apache服务器,并可以从那个页面的链接来进行确认,很方便.

1.Ruby和Rails的安装

Ruby和Rails有很多种的安装方式,如果在家自己捣鼓着玩的话个人推荐用rvm来安装,因为在rvm下可以很方便的管理ruby和rails的各种不同的包括不兼容的版本.

1.1 RVM的安装

RVM的安装比较简单,但要首先选择单用户(当前用户)还是多用户(root)的安装.选择当前用户的话可以安装到$HOME下面,主要是你个人利用,系统操作风险比较小.多用户(root)的话会安装到/usr/local/rvm下面,系统的所有用户都可以利用,当然sudo权限下会有些风险.更多信息请参照rvm安装主页(https://rvm.beginrescueend.com/rvm/install/).

个人选择单用户下的稳定版的安装,命令如下.

user$ bash -s stable < <(curl -s https://raw.github.com/wayneeseguin/rvm/master/binscripts/rvm-installer )

rvm命令添加到path里面

user$ echo ‘[[ -s "$HOME/.rvm/scripts/rvm" ]] && . “$HOME/.rvm/scripts/rvm” # Load RVM function’ >> ~/.bash_profile

读取.bash_profile

$ source .bash_profile

安装完毕后的确认

user$ rvm -v
rvm 1.10.0 by Wayne E. Seguin (wayneeseguin@gmail.com) [https://rvm.beginrescueend.com/]

1.2Ruby的安装

确认可以安装的版本

user$ rvm list known

安装所需要的版本

user$ rvm install ruby-1.9.3

选择安装版本为默认ruby版本

user$ rvm use 1.9.3 –default

确认

user$ruby -v

1.3Rails的安装

rvm下面不同的Rials版本是通过Gemset来管理的,所以安装之前需要建立所需要的gemset,或者不选择而安装到默认的gemset(global)里面.

user$ rvm gemset create rails3.1.0

<查看安装好的Gemsets

user$rvm gemset list

选择此次新安装的Gemset

user$ rvm gemset use rails3.1.0

查看安装好的Gemsets

user$rvm gemset list
gemsets for ruby-1.9.3-p0 (found in /Users/princy/.rvm/gems/ruby-1.9.3-p0)
global
=>; rails3.1.0

安装Rails

user$ gem install rails3

确认版本

user$ rails -v

建立一个Rails项目

user$ rails new depot
user$cd depot
user$rails server

然后可以通过下面的链接来确认程序的启动  (http://0.0.0.0:3000)

2.SVN的利用和配置

苹果系统已经安装好了SVN服务器了,所以可以很方便的利用svnadmin来建立repository.

user$ svnadmin create /Users/user/Sites/svnrepos

确认建立好的svnrepos

http://127.0.0.1/~user/svnrepos/

在svnrepos下面建立新的放前面建立好的rails项目的目录

/Users/user/Sites/svnrepos/rortest/trunk

将前面建好的目录导入到svn里面

user$ svn import -m “New ror import” depot http://127.0.0.1/~user/svnrepos/rortest/trunk

3.用Capistrano来自动release刚才的Rails系统

3.0 Capistrano安装

设定好的gemset下面安装Capistrano

user$gem install capistrano

查看安装的版本

user$ cap –version
Capistrano v2.9.0

3.1 Capistrano的Release系统的设定和配置
建立放置Release系统的文件夹

/Users/user/Source/Ruby/Rails/captest

进入上述目录后导入Capistrano的需要文件

user$capify .

根据提示会发现该目录下面建立了以下文件

Capfile config/deploy.rb

配置自动release的deploy.rb文件

#RVM设置所需内容
$:.unshift(File.expand_path(‘./lib’, ENV['rvm_path']))
require “rvm/capistrano”
#rvm_ruby_string是现在的gemset的名字
set :rvm_ruby_string, ’1.9.3-p0@rails3.1.0′

#防止跳出image,css文件夹找不到错误
set :normalize_asset_timestamps, false

#Release的名字和位置
set :application, “depot”
set :deploy_to, “/Users/user/Source/Ruby/Rails/captest/#{application}”

#设置SVN的内容
set :repository, “http://127.0.0.1/~user/repos/rortest/trunk”
set :use_sudo, false

#提示SSH用户和密码
set :user do Capistrano::CLI.ui.ask(‘SSH User:’)end
set :password do Capistrano::CLI.password_prompt(‘SSH Password’)end

#设定程序源码为SVN
set :scm, :subversion

role :web, “127.0.0.1″ # Your HTTP server, Apache/etc
role :app, “127.0.0.1″ # This may be the same as your `Web` server
role :db, “127.0.0.1″, :primary => true
#role :db, “your slave db-server here”

# if you’re still using the script/reaper helper you will need
# these http://github.com/rails/irs_process_scripts

# If you are using Passenger mod_rails uncomment this:
# namespace :deploy do
# task :start do ; end
# task :stop do ; end
# task :restart, :roles => :app, :except => { :no_release => true } do
# run “#{try_sudo} touch #{File.join(current_path,’tmp’,'restart.txt’)}”
# end
# end

第一次运行Capistrano时候的初始配置(建立Release用各种的文件夹)

user$cap deploy:setup

执行Capistrano命令(Checkout SVN内容,建立本次程序版本的文件夹,Bundle install,链接本次releases到current)

user$cap deploy

向Rails系统里面导入需要的数据

user$cap deploy:migrate

3.2 测试

去刚才的Capistrano目录下面的current文件夹里面启动Rails系统

user$rails s

重新Release一次系统

user$cap deploy

去Capistrano目录下确认Current已经连到了最新额SVN版本里面了

字符串处理

princy | October 20th, 2011 - 12:25:41

单纯的字符串连接速度比较

  • String  27183微秒

String testString = new String();
for (int i = 0; i < 100000; i++) {
testString += “test”;
}

  • StringBuffer  10微秒

StringBuffer testStringBuffer = new StringBuffer();
for (int i = 0; i < 100000; i++) {
testStringBuffer.append(“test”);
}
testStringBuffer.toString();

  • StringBuilder  6微秒

StringBuilder testStringBuilder = new StringBuilder();
for (int i = 0; i < 100000; i++) {
testStringBuilder.append(“test”);
}
testStringBuilder.toString();

结论: String>StringBuffer>StringBuilder. 其中String甩开StringBuffer和StringBuilder好几条街

原因: String每次链接的时候需要重新分配新空间,连接字符串,然后指向新链接的字符串.而StringBuffer和StringBuilder不需要重新实例化字符串,只需要在后面追加就可以了.如此以来,String连接时候步骤增加不少,并且内存占用会更大一些.

其余补充:

1.  为了获得更好的性能,在构造 StirngBuffer 或 StirngBuilder 时应尽可能指定它的容量。当然,如果你操作的字符串长度不超过 16 个字符就不用了。

2.  相同情况下使用 StirngBuilder 相比使用 StringBuffer 仅能获得 10%~15% 左右的性能提升,但却要冒多线程不安全的风险。而在现实的模块化编程中,负责某一模块的程序员不一定能清晰地判断该模块是否会放入多线程的环境中运行,因此:除非你能确定你的系统的瓶颈是在 StringBuffer 上,并且确定你的模块不会运行在多线程模式下,否则还是用StringBuffer 吧 J

3.  用好现有的类比引入新的类更重要。很多程序员在使用 StringBuffer 时是不指定其容量的(至少我见到的情况是这样),如果这样的习惯带入 StringBuilder 的使用中,你将只能获得 10 %左右的性能提升(不要忘了,你可要冒多线程的风险噢);但如果你使用指定容量的 StringBuffer ,你将马上获得 45% 左右的性能提升,甚至比不使用指定容量的StirngBuilder 都快 30% 左右。

 

Solr

princy | July 6th, 2011 - 14:16:59

About Solr

  • Based on Lucene, server-ization of Lucene
  • HTTP request processing for index and query
  • Has a web-based administrative interface
  • Configure file and schema file using  XML
  • Faceting of query results
  • Spell checking function
  • More like this function
  • Distributed solr server

Home page

  • http://lucene.apache.org/solr/

Solr books

  • 「Apache Solr 入門」
  • Solr 1.4 Enterprise Search Server

To be continued …

No SQL

princy | July 6th, 2011 - 13:53:04

Find all you want?

  • No SQL http://nosql-database.org/

Some other useful knowledges:

  • Google map reduce  http://labs.google.com/papers/mapreduce.html
  • Google big table  http://labs.google.com/papers/bigtable.html
  • Google file system http://labs.google.com/papers/gfs.html
  • Google Chubby  http://labs.google.com/papers/chubby.html

Hadoop

princy | July 6th, 2011 - 13:40:29

Hadoop:

  • Open source, reliable, distributed computing

Two Core Components:

  • HDFS: Distributed replicated file system, Self-healing high-bandwidth clustered storage, just stores bytes,
  • Map/Reduce: API for parallel computing, Fault-tolerant distributed processing, a batch system

Feature:

  • Hadoop scales linearly with data size or analysis complexity

TO Not NoSQL

  • Hive project adds SQL support to Hadoop
  • HiveQL compiles to a query plan
  • Query plan executes as MapReduce jobs

Hadoop users

  • Yahoo, Facebook, Twitter

Other words

  • Zookeeper – distributed synchronization
  • Avro – Data Serialization / RPC
  • H-BASE –  structured distributed database for horizontally scalable FS

EcoSystem of Hadoop

 

 

Useful links:

http://hadoop.apache.org/common/

http://www.cloudera.com/

http://www.slideshare.net/cloudera/tokyo-nosqlslidesonly

http://www.slideshare.net/xefyr/introduction-to-hadoop-hbase-and-nosql

http://www.slideshare.net/adorepump/hbase-nosql

 

 

在ubuntu11.04安装solr

princy | June 2nd, 2011 - 14:22:22

1 在ubuntu11.04下安装tomcat 6
sudo apt-get install tomcat6 tomcat6-admin tomcat6-common tomcat6-user tomcat6-docs tomcat6-examples
sudo apt-get install libmysql-java

2.下载apache-solr-1.4.1.zip并解压
cd ~/
wget -c http://ftp.riken.jp/net/apache//lucene/solr/1.4.1/apache-solr-1.4.1.zip
unzip apache-solr-1.4.1.zip
sudo cp ~/apache-solr-1.4.1/dist/apache-solr-1.4.1.war /var/lib/tomcat6/webapps/solr.war
sudo cp -R ~/apache-solr-1.4.1/example/solr/ /var/lib/tomcat6/solr/

3. 在tomcat6里面设置solr环境
sudo vim /etc/tomcat6/Catalina/localhost/solr.xml

加入如下内容

<Context docBase=”/var/lib/tomcat6/webapps/solr.war” debug=”0″ privileged=”true” allowLinking=”true” crossContext=”true”> <Environment name=”solr/home” type=”java.lang.String” value=”/var/lib/tomcat6/solr” override=”true” /> </Context>

4. 设置solrconfig.xml环境,并建立data文件夹
mkdir /var/lib/tomcat6/solr/data

设置tomcat6访问data的权限

chown -R tomcat6:tomcat6 /var/lib/tomcat6/solr/data/

通过solr/conf/solrconfig.xml来设置data路径
<– Used to specify an alternate directory to hold all index data other than the default ./data under the Solr home. If replication is in use, this should match the replication configuration. –>
/var/lib/tomcat6/solr/data

5. 重启tomcat后进入solr
sudo service tomcat6 restart
http://localhost:8080/solr/admin

Done