Linux下wget的不同处理

July 14, 2011

今天在AWS上写抓数据的程序,移植了一个简单的程序过去。但是不管怎么跑,Eclipse里面都报错:

"dafdafaf字符串": Scheme missing

以前没见过这个错误。开始还以为是Java环境设置的问题,后来发现原来是Windows下和Linux下对字符串处理的不同造成的。

在Windows下,从Java里调用wget的时候,为了防止URL中的特殊字符作怪,我在前后加了一个引号

"\http://cowoo.net/tech/?cat=12\"

正是多加的这两个引号导致了上面那个错误。搜了一下发现,Linux下Java按照空格来解析命令行,所以URL会被当成一个整体。不会出现我所担心的问题。

Capistrano发布WordPress主题

July 19, 2010

以前写好的用Capistrano发布Wordpress的配置文件丢了,无奈重新写过。

看了Capistrano的文档,应该蛮简单的,结果还是折腾了半天。最后的配置文件如下(放这里备查,注意事项在注释里):

set :application, "Productivelife.cn Theme"
set :repository,  "http://www.svnchina.com/svn/项目路径/"

# 文档里是svn+ssh://www.svnchina.com这样的,但是有的服务器可能不支持。

set :scm, :subversion
set :scm_username, "你的SVN用户名" #这个要填才行
set :scm_password, "你的SVN" #仿佛这个也必须放在配置文件里
set :checkout, "export"

set :deploy_to, "/home/customer/wp_themes"
set :user, "customer"
set :use_sudo, false

role :web, "productivelife.cn"                      

发布的时候先Setup:

cap deploy:setup

然后再Check和Update:

cap deploy:check

cap deploy:update

因为不是Rails应用,所以不需要其他的命令。这里update里面包含了update_code和symlink,对我的wordpress主题来说够用了。

CSS纵向对齐技巧

July 16, 2010

今天做一个Calendar的小方块,里面的文字死活顶到最上面,后来找了一篇"Vertical Centering With CSS",终于解决,就是把line-height设成100%。不过对于多行文字未测试。

<div id="content">
    Content here
</div>

 

#content {height:100px; line-height:100px;}

在Rails环境之外引用Active Support

March 27, 2009

比如要算360天之后的日期:

require 'rubygems'
require 'date'
require 'active_support'

puts Date.today.advance(:days => 360).to_s

Git,Bluehost以及Capistrano

February 18, 2009

昨天配置好了用GIT以及Capistrano在Bluehost上发布Rails应用的自动发布,感觉还不错,一点点记录如下:

1. Bluehost上的Rails是用的fcgi,不是Mongrel。所以要在.htaccess里面加上fcgi的handler:

AddHandler fcgid-script .fcgi

以及

RewriteRule ^(.*)$ dispatch.fcgi [QSA,L]

2. 正如这篇文章里所说,如果在Windows下开发,别忘了改首行:

dispatch.fcgi和dispatch.rb(在publice目录下)的首行。

因为BlueHost下是虚拟的unix系统,所以要改成#!/usr/bin/ruby

(如果在windows下开发的程序,用户常会忘了把首行改成unix下ruby的路径)

3. 如何在Bluehost上安装GIT?答案在这里

    注意的是因为Bluehost的防火墙的原因,GitHub的URL无法访问,比如

git://github.com/bsag/tracks.git

    就是无法访问的,不过可以把git改成http就ok了。

http://github.com/bsag/tracks.git

4. Capistrano基本上按照官网的文档一步一步走就OK了。要注意的是:

    如果你在windows下开发而git又没有放到path里面的话,走到 cap deploy:update 这一部可能出现错误。在GIT Bash里面进行就不会出错了。另外,在deploy.rb里面要多写如下一些:

set :branch, "master"  #因为GITHub的原因

namespace :deploy do
  desc "This is here to overide the original :restart"
  task :restart, :roles => :app do
    # do nothing but overide the default
    # Bluehost的fcgi模式不需要重启Mongrel
  end

  # 不想把database.yml放到scm中去
  # 从Advanced Rails Recipes里面找到的。
  task :copy_database_configuration do
    production_db_config = "~/rails/production.database.yml"
    run "cp #{production_db_config} #{release_path}/config/database.yml"
  end
  after "deploy:update_code" , "deploy:copy_database_configuration"

  # 修改public和tmp两个目录的权限
  #(好像Capistrano把log目录做了符号链接,所以没加log)
  task :change_dir_permissions do
    run "chmod -R 755 #{release_path}/public"
    run "chmod -R 755 #{release_path}/tmp"
  end
  after "deploy:symlink", "deploy:change_dir_permissions"
end

Linux统计目录下文件个数命令

February 13, 2009

快享转载:

查看某文件夹下文件的个数
ls -l |grep "^-"|wc -l

find ./company -type f | wc -l

查看某文件夹下文件的个数,包括子文件夹里的。
ls -lR|grep "^-"|wc -l
查看某文件夹下文件夹的个数,包括子文件夹里的。
ls -lR|grep "^d"|wc -l

说明:
ls -l
长列表输出该目录下文件信息(注意这里的文件,不同于一般的文件,可能是目录、链接、设备文件等)
grep "^-"
这里将长列表输出信息过滤一部分,只保留一般文件,如果只保留目录就是 ^d
wc -l
统计输出信息的行数,因为已经过滤得只剩一般文件了,所以统计结果就是一般文件信息的行数,又由于
一行信息对应一个文件,所以也就是文件的个数。

Git与GitHub

December 28, 2008

最近发现一个开源的GTD Web应用,名字叫Tracks,用Ruby on Rails开发的。很感兴趣,于是想掺和一下。发现从1.7开始,这个项目的版本控制工具从SVN转到了Git,心想有点意思。于是查了一下相关的资料,算是有点了解了。

自从Rails从SVN转向了Git之后,Git仿佛成了Rails社区的一个风尚。Git是所谓的分布式版本控制系统,每一个人的本地都维护了一个完整的repository,以及分支。这样就可以在本地自由地建立分支,提交,而不用担心影响到其他人的工作。等本地的工作完成的差不多了,再提交到统一的主干中。更多原理见Why Git is Better than X :) 不过这东西嘛,见仁见智咯。如果集中开发,模块划分的好,CVS一样用起来没什么问题。

另外值得一提的就是GitHub了。InfoQ上有一篇文章介绍GitHub。使用流程基本是这样:

1. 看到一个好项目,fork出来。比如我看到bsag / tracks,就fork一份出来,相当于在我名下建立一个副本,即cowoo/tracks

2. 安装了Git 的Windows版本之后,就可以把项目Clone到本地。

git clone git@github.com:cowoo/tracks.git

3. 进行一些修改,可以在本地Stage,Commit,建立分支等。

4. 提交到我在Github上的Clone。

git push master origin

5. 如果我觉得某个feature开发的不错,可以要求bsag把我的这个feature合并到主分支里面去。点那个”pull request”就可以了。不过俺还没有尝试过。

初次使用笔记。

阅读笔记 12/24/2008

December 24, 2008

订了不少Blog的RSS,但是怎么消费是一个问题。在Google Reader里加一个星标?感觉还是不够,那样只是有一个模糊的印象。那就写下来吧,边写边思考,也是不错的形式。

昨天ReadWriteWeb上有一个关于Ping.fm的报道,没仔细看。今天看到台湾的Mr6也在Blog上写了,发现不错。越来越多的SN确实是个让人头疼的问题,Ping.fm也算解决了问题,自然有人愿意使用。这也是中文社区的一个机会。

Zapproved这个网站帮助人们把结构化的问卷送到人们的信箱,算是Email的一个创新。最近各家在Email上的动作不小。Gmail不停的往Labs里面加东西,Yahoo准备开放Email插件。再加上一年之前看到的Xobni。大家以为没什么可做的Email领域其实还有很多可以挖掘的地方啊。比如腾讯最近的明信片服务就很可爱。

最近还看到一堆主机或者自称云计算的服务提供商,准备整理整理放到Cloud那个页面中去。

Bluehost上部署Rails应用

December 23, 2008

本来以前就部署过,不过每次相隔时间都比较长,于是每次都Google一遍,实在太浪费时间,还是自己记下来比较好。

主要参考的是Radiant这个用rails写的内容管理系统的wiki文章,讲如何在Bluehost上部署Radiant。我觉得关键有这么几点:

1. 修改.htaccess文件

把Handler那几行改成:

# General Apache options
AddHandler fcgid-script .fcgi
# AddHandler cgi-script .cgi
# Options +FollowSymLinks +ExecFCGI

2.修改dispatch.fcgi

加上这么几句:

ENV['RAILS_ENV'] = 'production'
ENV["GEM_HOME"]= "/home/[USER_NAME]/ruby/gems"
ENV["GEM_PATH"]= "/home/[USER_NAME]/ruby/gems:/usr/lib/ruby/gems/1.8" 

不过我觉得后面两句应该用处不大,是跟他前面的相呼应的,如果你用到一些自己安装的gems,就应该follow这篇文章。

3. 修改文件夹权限

我是把public,tmp和log三个文件夹的权限都变成了755。cd到rails应用根目录下,比如说rails/yourapp:

chmod -R 755 public

chmod -R 755 tmp

chmod -R 755 log

4. 建立符号链接

把rails/yourapp/public链接到public_html里面的一个子目录:

ln -s ~/radiant_app_folder_name/public ~/public_html/website_name

但是我这么弄了之后还是不行,后来找到Rails Google Group里面的讨论也有点用。正好我是要把应用作为账户的根目录使用,于是

$ mv ~/public_html ~/original_public_html

$ ln -s ~/rails-apps/myapp/public ~/public_html

然后就可以访问了:http://www.flexgtd.com

值得说明一下的是,bluehost上cpanel里面那个ruby on rails的安装向导一点也不好用,不要用那个来部署。我被搞得晕头转向也没搞明白怎么弄,而且觉得它的灵活性太差。

Python 日期时间处理笔记

December 20, 2008

昨天写到日期和时间的处理,需要输入日期和时间,存储到GAE的DataStore中。

GAE有三个与日期时间有关的Property:

DateTimeProperty
DateProperty
TimeProperty

这三个Property,其实最终都是以datetime.datetime存储,但是使用的时候又有一点不同。

Python中有很棒的解析字符串到时间对象的方法:time.strptime(string[, format]),这个方法会把字符串按照你想要的格式解析进来,放到一个时间对象中。返回值是一个struct_time。解析了之后还要存到GAE的DataStore对象中去,暂时找到了下面的方法:

tDate = time.strptime(self.request.get(‘getup_date’),’%m/%d/%Y’)
record.recordDate = datetime.date(tDate.tm_year, tDate.tm_mon, tDate.tm_mday)
tGetup = time.strptime(self.request.get(‘getup_at’), ‘%H:%M’)
record.getupAt = datetime.time(tGetup.tm_hour,tGetup.tm_min)
tSleep = time.strptime(self.request.get(‘sleep_at’), ‘%H:%M’)
record.sleepAt = datetime.time(tSleep.tm_hour,tSleep.tm_min)

这样就能把12/20/2008这样的日期,以及07:30这样的时间存成想要的对象了。注意如果直接把解析的结果赋给TimeProperty和DateProperty的话会出错。

另外,time.strftime(formart[, t])能够很好的将时间日期对象换成你想要的格式。

 
Powered by Wordpress and MySQL. Theme by Shlomi Noach, openark.org