2013年7月30日星期二

用GB2312 URL编码

NSString 进行 url编码:


stringByAddingPercentEscapesUsingEncoding

但这个方法,encode方式没有GB2312


所以,如果要进行GB2312的url编码,需采用CFString的

CFURLCreateStringByAddingPercentEscapes 方法



eg.

    return (NSString*)CFBridgingRelease(CFURLCreateStringByAddingPercentEscapes(kCFAllocatorDefault,
                                                                                (CFStringRef)self,
                                                                                NULL,
                                                                                CFSTR(":/?#[]@!$&’()*+,;="),
                                                                                kCFStringEncodingGB_18030_2000));

2013年7月28日星期日

redmine2.3 安装插件 redmine_ckeditor

redmine_ckeditor 插件地址:

https://github.com/a-ono/redmine_ckeditor


1、下载 redmine_ckeditor 

2、copy redmine_ckeditor 到 redmine 目录下的 plugins 目录下(不同版本的redmine的plugins文件夹的位置不一样)

3、在 redmine_ckeditor 根目录里有 Gemfile,所以插件的安装也需要依赖的库,而所需要的库就在 Gemfile 里。
所以要在 redmine_ckeditor 目录下,运行下面两步 (bundle install)

  1. Install the required gems
    bundle install --without development test
  2. Execute migration
    rake redmine:plugins:migrate RAILS_ENV=production

2013年7月24日星期三

RubyGems 与 Bundler

1、RubyGems镜像
由于国内网络原因(你懂的),导致 rubygems.org 存放在 Amazon S3 上面的资源文件间歇性连接失败。所以你会与遇到 gem install rack 或 bundle install 的时候半天没有响应,具体可以用 gem install rails -V 来查看执行过程。
这是一个完整 rubygems.org 镜像,你可以用此代替官方版本,同步频率目前为15分钟一次以保证尽量与官方服务同步。

如何使用?
$ gem sources --remove https://rubygems.org/
$ gem sources -a http://ruby.taobao.org/
$ gem sources -l
*** CURRENT SOURCES ***

http://ruby.taobao.org
# 请确保只有 ruby.taobao.org
$ gem install rails
如果你是用 Bundle (Rails 项目)
source 'http://ruby.taobao.org/'
gem 'rails', '3.2.12'
...

2、RubyGems介绍
RubyGems 是 Ruby 社群最常使用的套件管理系統,如同 Perl 的 CPAN 或 Python 的 EasyInstall / pip,使用者可以很簡易地安裝及管理套件。與其它的套件管理系統一樣,RubyGems 也有版本與相依性管理。
RubyGems 大致可以分為兩個部份。一個是 gem 命令,另一個則是在 runtime 中管理可用的 gems 與其版本。在這篇淺談中,將不會介紹所有的功能與選項,使用者請自行參閱 gem help

安裝

在 Ruby 1.9 之前,RubyGems 需要額外安裝,因為它不是官方的套件。而在 Ruby 1.9 之後,已被收錄至 Ruby 標準發行版中。差別在於收錄的版本可能比較舊。不過沒關係,因為 RubyGems 本身也可以由 RubyGems 散佈,因此只要先取得一份可以執行的 RubyGems,接著要管理都很容易。

01. Mac OS X

在 Mac OS X 中,雖然 Ruby 的版本是 1.8.7,但是 RubyGems 也已經預先裝好了。

02. Linux 發行版

在 Linux 上使用該發行版的套件管理系統即可。如果已是 Ruby 1.9 則不需要再安裝 RubyGems,若是較舊的 Ruby 1.8,通常 Linux 上的套件管理系統也有提供 RubyGems。

3、Bundler介绍
bundler主要用于管理Ruby应用程序的依赖关系,并按照此依赖关系安装所需的Gems。当运行bundle install命令来安装Gems时,bundler会使用当前目录下的名为Gemfile的文件来处理依赖关系。
以下是一个简单的Gemfile内容:
     source "http://rubygems.org"
     gem "nokogiri"
     gem "rack", "~>1.1"
     gem "rspec", :require => "spec"

文件第1行表明bundler会从http://rubygems.org下载Gems;第2行表明需要名为nokogiri的Gem;第3行表明需要名为rack的Gem,并且版本必须高于1.1;第4行表明rspec依赖于spec, 所以spec将先于rspec安装。

ubuntu passenger安装问题 与 nginx配置passenger

http://chinacheng.iteye.com/blog/1891003


Passenger有一个专门安装nginx的模块,安装起来非常方便 

安装的时候一个问题提示缺少 
引用
* Checking for Curl development headers with SSL support...
      Found: no
      Error: Cannot find the `curl-config` command.


解决办法 
Java代码  收藏代码
  1. sudo apt-get install libcurl3-dev  


配置用户权限 
引用

创建用户adduser www
nginx配置文件里设置user www
设置web 网站的文件夹(mysite)权限
chown www -R mysite

如果你之前用chmod 777修改过mysite,需要
chmod -R 755 mysite
find mysite -type f -exec chmod 644 {} \;
确保文件夹是755, 文件是644权限。


nginx部分配置文件 
Java代码  收藏代码
  1. user  www;  
  2. worker_processes  1;  
  3.   
  4. ......  
  5.   
  6. http {  
  7.     passenger_root /usr/local/rvm/gems/ruby-2.0.0-p195/gems/passenger-4.0.5;  
  8.     passenger_ruby /usr/local/rvm/wrappers/ruby-2.0.0-p195/ruby;  
  9.   
  10.     include       mime.types;  
  11.     default_type  application/octet-stream;  
  12.   
  13.     #access_log  logs/access.log  main;  
  14.   
  15.     sendfile        on;  
  16.     #tcp_nopush     on;  
  17.   
  18.     #keepalive_timeout  0;  
  19.     keepalive_timeout  65;  
  20.   
  21.     #gzip  on;  
  22.   
  23.     server {  
  24.         listen       8080;  
  25.         server_name  localhost;  
  26.   
  27.         #charset koi8-r;  
  28.   
  29.         #access_log  logs/host.access.log  main;  
  30.   
  31.         location / {  
  32.             root   /home/redmine-2.3/public;  
  33.             index  index.html index.htm;  
  34.             passenger_enabled on;  
  35.         }  
  36.   
  37.         #error_page  404              /404.html;  
  38.   
  39.         # redirect server error pages to the static page /50x.html  
  40.         #  
  41.         error_page   500 502 503 504  /50x.html;  
  42.         location = /50x.html {  
  43.             root   html;  
  44.         }  
  45.   
  46.         
  47.     }  
  48.   
  49.   
  50. }  

Redmine 2.3 on Ubuntu 12.04

http://hirooka.pro/?p=1139

http://www.tuicool.com/articles/nU7bQz



本文是安装 redmine 2.3

手动安装 ruby 1.9.3
手动安装 passenger 4.0.0
手动安装 redmine 2.3


在手动安装 passenger 4.0 时,会提示缺少一些库,按提示将对应的库安装即可编译

如:
Checking for Curl development headers with SSL support

Cannot find the `curl-config` command.

解决办法

sudo apt-get install libcurl3-dev




首先,先把感觉需要的软件都事先安装上
$ sudo apt-get install libyaml-dev libncurses5-dev libgdbm-dev libssl-dev libyaml-dev libreadline-dev tk-dev zlib1g-dev libmysqld-dev libmagickwand-dev apache2-threaded-dev

DB使用MySQL、WEB服务器使用Apache时,需要是现状下述软件。
$ sudo apt-get install apache2 mysql-server php5-mysql php5 php5-cgi libapache2-mod-php5 php5-common php-pear

Ruby

下载Ruby 

下载Ruby 1.9.3(  http://www.ruby-lang.org/ja/downloads/   ) 

编译Ruby 

$ wget ftp://ftp.ruby-lang.org/pub/ruby/1.9/ruby-1.9.3-p392.tar.gz
$ tar zxvf ruby-1.9.3-p392.tar.gz
$ cd ruby-1.9.3-p392
$ ./configure
$ make
$ sudo make install
安装完成后确认版本信息
$ ruby -v

安装bundler

$ sudo /usr/local/bin/gem install bundler --no-rdoc --no-ri

MySQL

设定MySQL

$ cd /etc/mysql/conf.d/
$ sudo vi characterset.cnf
设定内容
[client]
default-character-set=utf8
[mysqld]
character-set-server=utf8
重启MySQL
$ sudo service mysql restart
确认MySQL文字编码
$ mysql -uroot -p
mysql> show variables like 'character_set%';
执行结果:
+--------------------------+----------------------------+
| Variable_name            | Value                      |
+--------------------------+----------------------------+
| character_set_client     | utf8                       |
| character_set_connection | utf8                       |
| character_set_database   | utf8                       |
| character_set_filesystem | binary                     |
| character_set_results    | utf8                       |
| character_set_server     | utf8                       |
| character_set_system     | utf8                       |
| character_sets_dir       | /usr/share/mysql/charsets/ |
+--------------------------+----------------------------+
8 rows in set (0.01 sec)

制作数据库

  做成Redmine的Mysql数据库和用户。

$ mysql -u root -p
例:
mysql> create database db_redmine default character set utf8;
mysql> grant all on db_redmine.* to user_redmine@localhost identified by 'password';
mysql> flush privileges;
mysql> exit;

Redmine

下载Redmine

从 http://rubyforge.org/frs/?group_id=1850  下载Redmine 2.3.0 

Redmine解压、配置

$ wget http://rubyforge.org/frs/download.php/76867/redmine-2.3.0.tar.gz
$ tar zxvf redmine-2.3.0.tar.gz 
$ sudo mv redmine-2.3.0 /usr/local/
$ sudo ln -s /usr/local/redmine-2.3.0 /usr/local/redmine
设置数据库连结
做成database.yml 
$ cd /usr/local/redmine/config
$ vi database.yml
内容例:
production:
  adapter: mysql2
  database: db_redmine
  host: localhost
  username: user_redmine
  password: password
  encoding: utf8


安装Gem

$ cd /usr/local/redmine
$ bundle install --without development test postgresql sqlite

Redmine的初始设定以及数据库表的做成

$ bundle exec rake generate_secret_token
$ RAILS_ENV=production bundle exec rake db:migrate

安装Passenger

$ sudo gem install passenger --no-rdoc --no-ri

安装Passenger的Apache使用模块

$ sudo /usr/local/bin/passenger-install-apache2-module
注:这里和预想不一致,由于默认安装的Passenger为4.05(原文为3.0.19)安装的 版本过高。需要手工安装ssl,按照安装提示apt-get即可。

Apache

添加Passenger的设定信息

制作Apache需要使用的Passenger设定文件
$ sudo vi /etc/apache2/conf.d/passenger.conf
注:设定内容需要按学号下述命令输出结果来设定
    passenger-install-apache2-module --snippet


$ sudo a2enmod headers

为Redmine执行来配置Apache上的Passenger

$ sudo chown -R www-data:www-data /usr/local/redmine-2.3.0
$ sudo ln -s /usr/local/redmine/public /var/www/hoge

在/etc/apache2/conf.d/passenger.conf 最后一行添加下述内容
$ sudo vi /etc/apache2/conf.d/passenger.conf

RailsBaseURI /hoge

重启Apache
$ sudo /etc/init.d/apache2 restart

尝试远程访问
http://(IP地址)/hoge/ 如果现实Redmine的话,表示安装完成。

安装完Redmine之后

    请根据需要做各种设定,但无论如何最少也要修改admin的密码,
同时修改用户登录为无效、同时选择需要认证的检查。 

Ubuntu下Apache重启错误:Could not reliably domain name

在Ubuntu上装完Apache后,每次启动apache服务器都会得到如下警告:
apache2: Could not reliably determine the server’s fully qualified domain name, using 127.0.0.1 for ServerName
解决办法也很简单:
sudo echo ServerName localhost >> /etc/apache2/httpd.conf
或者
sudo gedit /etc/apache2/httpd.conf
在里面加上一行:
ServerName localhost
注意httpd.conf默认是个空文件

2013年7月22日星期一

RVM 实用指南


rvm是一个命令行工具,可以提供一个便捷的多版本ruby环境的管理和切换。
如果你打算学习ruby/rails, rvm是必不可少的工具之一。
这里所有的命令都是再用户权限下操作的,任何命令最好都不要用sudo.

rvm安装

$ curl -L get.rvm.io | bash -s stable
$ source ~/.bashrc
$ source ~/.bash_profile

修改 RVM 的 Ruby 安装源到国内的 淘宝镜像服务器,这样能提高安装速度

$ sed -i -e 's/ftp\.ruby-lang\.org\/pub\/ruby/ruby\.taobao\.org\/mirrors\/ruby/g' ~/.rvm/config/db

ruby的安装与切换

  • 列出已知的ruby版本
rvm list known
  • 安装一个ruby版本
rvm install 1.9.3
这里安装了最新的1.9.3, rvm list known列表里面的都可以拿来安装。
  • 使用一个ruby版本
rvm use 1.9.3
如果想设置为默认版本,可以这样
rvm use 1.9.3 --default 
  • 查询已经安装的ruby
rvm list
  • 卸载一个已安装版本
rvm remove 1.9.2

gemset的使用

rvm不仅可以提供一个多ruby版本共存的环境,还可以根据项目管理不同的gemset.
gemset可以理解为是一个独立的虚拟gem环境,每一个gemset都是相互独立的。
比如你有两个项目,一个是rails 2.3 一个是 rails 3. gemset可以帮你便捷的建立两套gem开发环境,并且方便的切换。
gemset是附加在ruby语言版本下面的,例如你用了1.9.2, 建立了一个叫rails3的gemset,当切换到1.8.7的时候,rails3这个gemset并不存在。
  • 建立gemset
rvm use 1.8.7
rvm gemset create rails23
  • 然后可以设定已建立的gemset做为当前环境
use 可以用来切换语言,或者gemset,前提是他们已经被安装(或者建立)。并可以在list命令中看到。
rvm use 1.8.7
rvm use 1.8.7@rails23
然后所有安装的gem都是安装在这个gemset之下。
  • 列出当前ruby的gemset
rvm gemset list
  • 清空gemset中的gem
如果你想清空一个gemset的所有gem,想重新安装所有gem,可以这样
rvm gemset empty 1.8.7@rails23
  • 删除一个gemset
rvm gemset delete rails2-3

项目自动加载gemset

rvm还可以自动加载gemset.
例如我们有一个rails3.1.3项目,需要1.9.3版本ruby.整个流程可以这样。
rvm install 1.9.3
rvm use 1.9.3
rvm gemset create rails313
rvm use 1.9.3@rails313
下面进入到项目目录,建立一个.rvmrc文件。
在这个文件里可以很简单的加一个命令:
rvm use 1.9.3@rails313
然后无论你当前ruby设置是什么,cd到这个项目的时候,rvm会帮你加载 ruby 1.9.3和rails313 gemset.

使用rvm来快速部署nginx+passenger

*首先安装passenger
gem install passenger
然后使用passenger-install-nginx-module 来安装nginx和部署。
因为这一步需要root权限(因为要编译nginx)可以用rvmsudo这个东西。(这个东西真是个好东西)
rvmsudo passenger-install-nginx-module
然后会让你选择是下载nginx源码自动编译安装,还是自己选择nginx源码位置。
选择nginx手动安装的可以添加别的编译参数,方便自定义编译nginx。
然后一路下载安装。默认的安装位置为/opt/nginx.
然后看看nginx.conf,都给你配置好了,只需要加上root位置(yourapp/public)就可以了。
当我第一次安装完成了,就惊呼,这也太爽了吧。
ps:rvm是个好东西,做的很智能,(大部分)操作失败后会告诉你原因,然后告诉你需要安装哪些Lib等等,非常适合新手老手使用,简直是居家旅行必备良药。