Displaying articles with tag

将mysql数据导入到sqlite中

Posted by leeseon, Tue Feb 17 18:52:00 UTC 2009

rails 2.0将默认配置的数据库改成sqlite 之后,我才真的开始使用这个”self-contained, serverless, zero-configuration, transactional”小巧,轻便的嵌入式的数据库、、、以下省去 溢美之词n多字

不对sqlite对我来说最大的好处就是不用安装与启动服务,完全就是一个绿色版,只要拷贝过来,放在路径之下就能直接使用了,而且数据库也就是一个文件也是可以随身携带的

如果不喜欢二进制文件也可以将数据转成文本,命令如下:

sqlite3 dbfile.sqlite3 ".dump" > sqlite3db.sql

不过我倒是没有试过在生产环境中使用它,平时在开发与测试时才使用,因此需要将一些mysql中的数据导入到我本地的sqlite3中

自然是先google之,看到一个比较直白的解决方案 它使用mysqldump导出sql语句并从中仅grep(提取)出insert语句,然后在使用
rake db:create
rake db:migrate
之后用
sqlite3 dbfile.sqlite3 < backup.sql
将数据导入到sqlite3中

不过其中有一点小问题:正如文中所说,mysql与sqlite3的转义符并不一致,除了需要将\'转成''(两个单引号)之外,还需要将"\r"(0x5c0x72)与"\n"(0x5c0x6e)转成\r(0x0d)\n(0x0a),此外\"也是需要转成"(双引号)的

并且文中的替换方法是使用编辑器手工替换的,这点与我懒惰的习惯实在是不符,还是用sed来自动化一下吧!最终拼成一个脚本如下:

#!/bin/sh
mysqldump  --opt --no-create-db --no-create-info --default-character-set=utf8 --extended-insert=0 -u user -ppassword database \
| grep 'INSERT' \
| sed -e "s/\\\'/''/g" -e "s/\\\r/\r/g" -e "s/\\\n/\n/g" -e 's/\\\"/"/g' > backup.sql

如果你需要每天将服务器上的数据备份并应用在日常的开发中的话,可以参考上次所写的DreamHost每日mysql数据库备份方案 将上面这段合并到Dreamhost 的cron任务中

0 comments | Filed Under: | Tags:

Capistrano配置及版本控制实践

Posted by leeseon, Sun Jul 06 18:24:00 UTC 2008

以前一直都将Capistrano 的deploy.rb的文件放在SVN中,最近需要将代码共享给别人一同开发,这才发现了有一个问题,就是我的空间帐号与数据库的密码是不希望让人知道,毕竟知道的人越少越好嘛。

而且最近做了一件傻事,就是以前我都是将


ENV["GEM_HOME"]="/home/yourusername/.gems" 
ENV["GEM_PATH"]="/home/yourusername/.gems:/usr/lib/ruby/gems/1.8" 

这样的配置放在dispatch.fcgi中,现在因为使用了Phusion Passenger (mod_rails)之后,这一段的内容放在了config/enviroment.rb之中,所以在windows上运行rake test时,出现了找不到gems的错误,一时没有想到了这样的问题,还费了半天的功夫:(

于是鉴于这些问题,deploy.rb原则上不需要放在版本控制中的,而且database.yml与enviroment.rb也不需要放在版本控制之中,这些文件可以另外保存,与rails代码分开,放在另一个版本控制之中,并且放在share_dir中,在部署时拷贝到相应的目录之中。

想做到这样,只需要在deploy.rb中增加一个任务

before "deploy:restart", 'deploy:copy_config'
desc "Copy the configuration file " 
task :copy_config, :roles => :app, :except => { :no_release =>  true  }   do
  run "cp -f #{shared_dir}/environment.rb #{current_path}/config/environment.rb" 
  run "cp -f #{shared_dir}/database.yml #{current_path}/config/database.yml" 
end

即可

2 comments | Filed Under: | Tags:

更新了一下脚本

Posted by leeseon, Sun Jul 06 15:35:00 UTC 2008

自从上回 之后,ruby、rails与gems也都开始更新了,于是也更新了一下安装脚本,如下:

  • mkdir ~/.gems
  • echo ‘export GEM_HOME=”$HOME/.gems”’ >> .bash_profile
  • echo ‘export GEM_PATH=”$GEM_HOME:/usr/lib/ruby/gems/1.8”’ >> .bash_profile
  • echo ‘export PATH=”$HOME/.gems/bin:$PATH”’ >> .bash_profile
  • echo ‘export PATH=”$HOME/local/bin:$PATH”’ >> .bash_profile
  • . ~/.bash_profile
  • echo $PATH
  • touch ~/.gemrc
  • echo gemhome:/home/$(whoami)/.gems >> ~/.gemrc
  • echo gempath: >> ~/.gemrc
  • echo -/home/$(whoami)/.gems >> ~/.gemrc
  • echo -/usr/lib/ruby/gems/1.8 >> ~/.gemrc
  • # setup directories
  • mkdir -p ~/local/usr/src/ruby
  • cd ~/local/usr/src/ruby
  • # Install readline
  • wget ftp://ftp.cwru.edu/pub/bash/readline-5.2.tar.gz
  • tar zxvf readline-5.2.tar.gz
  • cd readline-5.2
  • ./configure—prefix=$HOME/local
  • make
  • make install
  • cd ..
  • # install ruby
  • wget ftp://ftp.ruby-lang.org/pub/ruby/1.8/ruby-1.8.7-p22.tar.bz2
  • tar jxvf ruby-1.8.7-p22.tar.bz2
  • cd ruby-1.8.7-p22
  • ./configure—prefix=$HOME/local—with-readline-dir=$HOME/local/
  • make
  • make install
  • cd ..
  • # fix path
  • export PATH=$HOME/local/bin:$PATH
  • # get rubygems
  • wget http://rubyforge.org/frs/download.php/38646/rubygems-1.2.0.tgz
  • tar zxvf rubygems-1.2.0.tgz
  • cd rubygems-1.2.0
  • $HOME/local/bin/ruby setup.rb config—prefix=$HOME/local
  • $HOME/local/bin/ruby setup.rb setup
  • $HOME/local/bin/ruby setup.rb install
  • cd ..
  • # Install RAILS
  • gem install rails
  • # Install FastCGI
  • curl -O http://www.fastcgi.com/dist/fcgi-2.4.0.tar.gz
  • tar xzvf fcgi-2.4.0.tar.gz
  • cd fcgi-2.4.0
  • ./configure—prefix=$HOME/local
  • make
  • make install
  • cd ..
  • # Install FastCGI & MySQL gem packages
  • gem install fcgi——with-fcgi-dir=$HOME/local
  • gem install mysql——with-mysql-config
  • # gem update

关于脚本的解释可以看以前 的说明,这次仅仅只是版本上的更新而已,不再多做说明

文件依然放在http://leeseon.com/private/allinstall.sh

也同样可以使用


curl http://leeseon.com/private/allinstall.sh | sh

来执行,无它、、、

0 comments | Filed Under: | Tags:

Rails/Ruby社区越来越快了

Posted by leeseon, Sun Jun 22 17:19:00 UTC 2008

Rails在6.1号就已经发布2.1了,这个号称参与人数最多,代码更改行数最多的版本,就这么漫不经心地来了。最近gems也发布1.2了,而且中文版本的《what’s new in rails 2.1》也基本上在网络上翻译好了,rails的社区参与度与活跃度也最来最高了,这样的rails/ruby社区怎能不越来越快?

最近依然在忙碌中度过,上来写写博文只能算是应个景儿,有点对不起自己了:(

0 comments | Filed Under: | Tags:

running on rails-----在铁轨上奔跑速度自然就会快:P

Posted by leeseon, Thu Jun 05 15:53:00 UTC 2008

最近一直忙于工作,居然有两周没有写blog了,不过也不是完全没有时间写,只是因为实在是没有什么时间来实践rails上的一些新东东,觉得言之无物:(

不过ruby/rails社区最近却是如大事连连:先是rails 2.1的发布,还有就是ironruby在rubinius之后也宣布可以运行rails了,这个所有ruby实现都视之为重要目标的里程碑。

一旦运行上了轨道,后面自然是一发而不可收拾噢,虽然我对ironruby的兴趣缺缺的说

只是偶然发现ruby on rails的这个名字真的很有趣,以至于我自己能生造出Running On Rails这样古怪的半通不通的双关来,算是玩笑吧:P

0 comments | Filed Under: | Tags:

Rubinius开始支持rails了

Posted by leeseon, Mon May 19 16:28:00 UTC 2008

不是我不明白,只是这个世界变得快!

最近因为地震的原因,在网上看新闻的时侯比较多,对于ruby的新进展的了解要慢了几拍:

昨天才知道dreamhost已经开始支持mod_rails了,还写下了一篇酸溜溜的blog

今天也是通过从InfoQ订阅的新闻中得知Rubinius开始支持rails了,好消息啊,这是续它支持gems与merb之后又一重大的里程碑啊,贺之!看来以后新的rails的基于rubinius的host主机很可能会出现了,最有可能的自然是engineyard 了,只是不希望太贵噢,这样我还能试试,不过想来可能性不大:(

0 comments | Filed Under: | Tags:

在DreamHost上安装Ruby、Gems与Rails的最简单方法之续

Posted by leeseon, Sat May 10 18:03:00 UTC 2008

昨天只是泛泛谈了一下在DreamHost上安装Ruby、Gems与Rails的最简单方法 似乎有点 意犹未尽,决定写个续集,呵呵:)

好吧从哪儿说起呢?嗯,看我注释过的脚本吧,注释应该已经算是说得比较明白了,无它!

  • #修改.bash_profile,设置环境变量GEM_HOME与GEM_PATH
  • #并将~/.gems/bin与~/local/bin加入到查找路径的前端
  • echo  'export GEM_HOME="$HOME/.gems"'  >> .bash_profile
  • echo  'export GEM_PATH="$GEM_HOME:/usr/lib/ruby/gems/1.8"'  >> .bash_profile
  • echo  'export PATH="$HOME/.gems/bin:$PATH"'  >> .bash_profile
  • echo  'export PATH="$HOME/local/bin:$PATH"'  >> .bash_profile
  •   
  • #执行.bash_profile使变量生效
  • . ~/.bash_profile
  • #显示PATH变量,仅仅只是为了测试
  • echo $PATH
  •   
  • #生成gems所需的目录及.gemrc文件,并填充相应内容
  • mkdir ~/.gems
  • touch ~/.gemrc
  • echo gemhome:/home/$(whoami)/.gems >> ~/.gemrc
  • echo gempath: >> ~/.gemrc
  • echo -/home/$(whoami)/.gems >> ~/.gemrc
  • echo -/usr/lib/ruby/gems/1.8 >> ~/.gemrc
  •   
  • # setup directories
  • mkdir -p ~/local/usr/src/ruby
  • cd ~/local/usr/src/ruby
  •   
  • # Install readline
  • wget ftp://ftp.cwru.edu/pub/bash/readline-5.2.tar.gz
  • tar zxvf readline-5.2.tar.gz
  • cd readline-5.2
  • ./configure --prefix=$HOME/local
  • make
  • make install
  • cd ..
  •   
  • # install ruby
  • wget ftp://ftp.ruby-lang.org/pub/ruby/1.8/ruby-1.8.6-p114.tar.gz
  • tar zxvf ruby-1.8.6-p114.tar.gz
  • cd ruby-1.8.6-p114
  • ./configure --prefix=$HOME/local --with-readline-dir=$HOME/local/
  • make
  • make install
  • cd ..
  •   
  • # fix path
  • export PATH=$HOME/local/bin:$PATH
  •   
  • # get rubygems
  • wget http://rubyforge.org/frs/download.php/35283/rubygems-1.1.1.tgz
  • tar zxvf rubygems- 1.1.1.tgz
  • cd rubygems-1.1.1
  • $HOME/local/bin/ruby setup.rb config --prefix=$HOME/local
  • $HOME/local/bin/ruby setup.rb setup
  • $HOME/local/bin/ruby setup.rb install
  • cd ..
  •   
  • # Install RAILS
  • gem install rails
  •   
  • # Install FastCGI
  • curl -O http://www.fastcgi.com/dist/fcgi-2.4.0.tar.gz
  • tar xzvf fcgi-2.4.0.tar.gz
  • cd fcgi-2.4.0
  • ./configure --prefix=$HOME/local
  • make
  • make install
  • cd ..
  •   
  • # Install FastCGI & MySQL gem packages
  • gem install fcgi -- --with-fcgi-dir=$HOME/local
  • gem install mysql -- --with-mysql-config

0 comments | Filed Under: | Tags:

在DreamHost上安装Ruby、Gems与Rails的最简单方法

Posted by leeseon, Fri May 09 21:47:00 UTC 2008

其实这篇帖子是一年前就应该写的,当时在DreamHost 上折腾了几天才搞定mephisto,花了两周才搞定depot例子加上gettext汉化的过程。不过人总是好了伤疤忘了痛,而且事后想想也觉得没有什么可说,就不了了之了。而且如今DreamHost也开始进行mod_rails的beta测试了,想来现在才写是有点不太合时宜噢。不过最近又在DreamHost上部署了几个rails应用,不免有也心烦,于是有了旧事重提,朝花夕拾一下的想法。

不过有一点要声明就是,其实在DreamHost上安装自己的gems其实是并不需要自己安装Ruby的,这两个过程是可以分开的,不过可能是我变态,总喜新厌旧,而且又狂有控制欲,那么大的空间为什么不装一个,而且还可以为ruby打上GC的补丁呢(其实也就是一想,补丁嘛我也没有打过:P,因为现在还用不上的)。

Ruby装起来很简单,wget一个,解包,编译,安装,将之放入你的路径中就好,不过最好是先编译一份readline为好,以免以后执行script/console会出错,这个不多说,能google出一堆。

Gems嘛,则需要你建一个本地的安装目录,通常为.gems,并告诉gems知道这个目录的存在,为了这一点你就需要有~目录下生成一个.gemrc的文件,并将你的目录告诉它就好了。当然你也可以如我一样,编译一份最新的rubygems,并将之放入你的查找路径之中就好。

然后你还需要修改rails的disptch.fcgi文件,让它知道你的ruby与gems目录所在就好。当然其实你也可以使用GemsOnRails 将所有用到的gems放在vendor下,这个就自然不需要自己安装Gems了(rmagick之类的除外)。

好了,言归正传吧,何以言之我的方法最简单呢?其实是受了tobi 的启发,将所有的安装命令写成一个脚本然后直接执行它就好。不过与他不同的一点是,我在脚本上增加了GEM_HOME与PATH之类的添加与.gemrc文件的生成,真的是一站式搞定。如果你不太懂linux,那你有福了,当然如果你是linux高手,那就让我怡笑大方吧:(

其实这条命令就是


curl http://leeseon.com/private/allinstall.sh | sh

而已,还算简单吧,嘿嘿

不过在这之后你的dispatch.fcgi文件还需要将第一行改成,(dispatch.rb也最好改一下,虽然我发现不改也行)


#!/home/your user name/local/bin/ruby

并在require语名之前加上


ENV['RAILS_ENV'] = 'production'
ENV["GEM_HOME"]="/home/your user name/.gems" 
ENV["GEM_PATH"]="/home/your user name/.gems:/usr/lib/ruby/gems/1.8" 

OK,万事搞定,试试吧!

注:我安装的是现在最新版本的ruby-1.8.6-p114与rubygems-1.1.1 这个以后会不定时的更新为最新版本

0 comments | Filed Under: | Tags:

Haml=>不错的选择

Posted by leeseon, Sat May 03 17:13:00 UTC 2008

使用过Yaml之后,就不再习惯XML,即便有Textmate优秀的补齐功能,我也觉得写起来不甚其烦,毕竟拿来给机器阅读的东东,却用手工来写,总有种左支右拙、捉襟见肘的困顿之感。

而且有了builder这么神奇的工具,生成一个XML真是件让人舒心的事啊。不用再tag来tag去,而且要时时记得关闭每个tag了。我就曾经试着将生成一个WXS文件(WIX工具的源文件)的VBScript脚本用ruby重写一次,那个爽啊,真的是写完了好久都一直处在兴奋之中,代码简单明快,不用与那烦人的DOM接口打交道,将整个事情还原为一种享受、、、

言归正传,不再闲扯:P 不过在rails中,当你使用erb这种默认的模板语言时,痛苦又一次袭来,书写模板又一次成为了一件让人厌倦的事,不过好在早就有人困惑于此吧,于是有了Haml 当然haml自然也不是什么新东东,早就有人介绍过了,不过最近发现了一个rspec-haml-scaffold-generator 与一个Haml的textmate下的bundle ,试用之下觉得不错,推荐大家用用,当然早就用过就不再多说了:( 呵呵,不过总而言之真的是很爽很简单! 只是除了它所说的速度要比原生的erb要慢上30%左右,不过就我的感觉而言,还是不错的,没有太明显的感觉

0 comments | Filed Under: | Tags: