by agate - Published: 2009-07-19 [3:52 下午] - Category: 开发环境

今天在 Ubuntu上安装 Sinatra 后准备试试看是否成功, 但是在执行写好的 ruby 脚本的时候发现原来 Sinatra 是没有自带 Server 的. 需要安装 thin, mongrel, webrick 其中至少一个.(都是 rack 服务器好像)

由于 mongrel 和 webrick 都使用过了, 怀着好奇的心情今天试着装了一下 thin, 同时遇到了一些问题, 记录下来.

0. 不用说了 gem install thin

1. g++
我安装到一半就告诉我出错:

make: g++: Command not found
make: *** [rubymain.o] Error 127

我其实不清楚 g++ 和 gcc 的区别, 我觉得很奇怪, 一般不是都默认装了 gcc 么? 怎么安装的时候却找不到 g++ 呢? 怀着怀疑的态度我试着 apt 了一下 g++ 没想到真的有这么一个玩意. 只要安装好了就可以成功通过 gem 安装 thin

2. openssl
装完了当然是用用看咯. 我在命令行键入 thin 却被告知:

/usr/lib/ruby/1.8/rubygems/custom_require.rb:31:in `gem_original_require': no such file to load -- openssl (LoadError)

可是 openssl 我的确装了啊, google 了一下原来还要装 libopenssl-ruby

DONE

Tags: [ , ] - Comments: Comments
by agate - Published: 2009-05-13 [1:51 下午] - Category: 程序编码

首先谢谢 wujiang 的推荐, 在详细阅读 Sinatra 的文档和看了 rubyconf 的视频之后, 我举双手认同这个新的 ruby web 框架.

它没有 rails 那样的臃肿(? 之前我们说 rails 多么敏捷轻量阿... ). 它可以十分便捷地将所有现成的东西集成进来. 你不需要做很多的配置, 你只要知道我需要什么, 然后你就用吧.
它十分Restful: GET/POST/PUT/DELETE 都是集成的. 方便将 web 应用写成良好的格式.
它支持多种模板: Haml Erb Sass Builder
它支持多种持久层框架: Datamapper Sequel ActiveRecord

更多的细节可以查阅: Sinatra - The Book (一个十分短小的优质文档)
PS. 我喜欢 Sequel!

Tags: [ , , , , ] - Comments: Comments
by agate - Published: 2009-04-05 [5:13 下午] - Category: 开发环境

我一般不喜欢改动系统的总体配置, 所以一般我使用 gem 安装的时候都是不加 sudo 的. 于是我的大多数 gems 都是安装在 ~/.gem 下的(包括 rails). 今天装了 rails 2.3.2 似乎有点不爽(感觉). 于是想卸载. 但是在我执行:
$ gem uninstall rails
ERROR: While executing gem ... (Gem::InstallError)
  Unknown gem rails >= 0

弄了半天, 也查了是不是路径拼写错误. 还是没弄出来...
后来 google 了一下, 得知由于非默认安装位置(非 sudo 嘛). 所以需要指定 --install-dir 参数. 于是乎我就这么写了:
$ gem uninstall --install-dir ~/.gem/ruby/1.8
ERROR: While executing gem ... (Gem::InstallError)
  Unknown gem rails >= 0

还是一样噢... 无奈, 继续 google! 发现一个命令:
$ gem list -d rails
*** LOCAL GEMS ***
rails (2.3.2, 2.2.2)
  Author: David Heinemeier Hansson
  Rubyforge: http://rubyforge.org/projects/rails
  Homepage: http://www.rubyonrails.org
  Installed at (2.3.2): /home/agate/.gem/ruby/1.8
    (2.2.2): /home/agate/.gem/ruby/1.8

这样就十分方便地晓得了具体 gem 安装的路径了, 直接拷贝下来作为 --install-dir 参数即可.
$ gem uninstall --install-dir /home/agate/.gem/ruby/1.8 rails
Select gem to uninstall:
1. rails-2.2.2
2. rails-2.3.2
3. All versions
> 2
Successfully uninstalled rails-2.3.2

至此, 小问题解决.

PS. 你会说: 呀 "/home/agate/.gem/ruby/1.8" 和 "~/.gem/ruby/1.8" 不是一样么? 怎么第一次用 --install-dir ~/.gem/ruby/1.8 不行呢?
因为就是不行! 我也不知道, 他就是要绝对路径罢了...

Tags: [ , , ] - Comments: Comments
by agate - Published: 2008-12-22 [4:24 下午] - Category: 程序编码

Eval
以 string 的格式执行 ruby 表达式. 比如
eval "str = %{helloworld}"
就会创建一个 str 变量, 其值为 "helloworld"

obj.send
调用 obj 中的方法以 symbol 的形式. 比如
class User
  def say(str)
    "user says: #{str}"
  end
end
u = User.new
u.send :say, 'i am a boy~' #=> "user says: i am a boy~"

如果这个 obj 中有方法覆盖了 send 方法, 那么我们可以使用 __send__ 来代替 send 方法

Tags: [ ] - Comments: Comments
by agate - Published: 2008-10-17 [10:00 上午] - Category: 开发环境

我原先的环境:

RUBYGEMS VERSION: 1.2.0
RAILS VERSION: 2.1.1

但是当我升级到 RUBYGEMS 1.3.0 的时候, 每当用命令行生成一些 rails 文件的时候就会报:

Gem::SourceIndex#search support for Regexp patterns is deprecated 2.1.1

十分不爽! 于是寻寻觅觅问题所在, 在鸟语网站上查了很多都是说是 RUBYGEMS 1.3.0 的问题, 只是一个提醒罢了, 无关痛痒的! 但是我看着就是十分不爽呀! 就想能不能降级到 RUBYGEMS 1.2.0 呢? 在 google 上找到了一个方法!
$sudo gem install rubygems-update -v 1.2.0
问题是我原来是从 RUBYGEMS 1.2.0 升级上来的, 于是我的系统里存在 RUBYGEMS 1.2.0 和 1.3.0 两个升级文件, 默认情况下执行 update_rubygems 会升级到最新版本(这不是我们期望的). 于是必须使用 gem uninstall 来卸最新的 1.3.0 rubygems.
$sudo gem uninstall rubygems-update
会列出一个列表选择需要卸载的序号后回车即可!

这样卸载之后再次执行:
$sudo update_rubygems
就可以降级回到原先的 RUBYGEMS 1.2.0 咯! 等到 rails 或者 rubygems 自己解决这个不爽的提示之后我们在升级吧!

Tips:
gem env
gem list

Tags: [ , , ] - Comments: Comments
by agate - Published: 2008-10-16 [8:22 下午] - Category: 程序编码

type in your terminal:

$sudo gem install ZenTest
$autotest

and the autotest has runned.

Tags: [ , , ] - Comments: Comments
by agate - Published: 2008-10-09 [11:35 上午] - Category: 程序编码

之前说了一个十分好用的 ruby 天气插件 rweather. "r_weather! ruby 中获取天气的 API".

但是这个 rweather 插件有一个缺点, 就是它太简陋了! 只能获取当前天气状态, 而恰恰在这仅有的当前状态中却没有最高温度和最低温度, 只有当前温度以及外国人常用的感觉温度. 这个只能是小用用, 真正做个天气功能模块还是比较不足的!

又去 github 上面转了转, 看了很多 weather 的插件. 其中有两款让我十分喜爱, 一个是小日本写的 ruby-weatherhacks 和一个叫做 weatherman 的天气插件. 两者都有十分详细的信息获取. 当然小日本那个是日语的服务器, so... 我们还是用 weatherman 吧!

weatherman 这个插件使用方式几乎和 rweather 一样!(都是通过 weather.com 请求信息). 更重要的是, weatherman 可以获取 '当前', '当日', '3天', '周五' 等多种多样的信息格式! 具体的查看 README 文件就十分明白了!

Tags: [ , , ] - Comments: Comments
by agate - Published: 2008-10-07 [2:47 下午] - Category: 程序编码

weather.com 大家都熟悉. 如何在 ruby 环境下调用该网站的天气数据呢? 自己写? 太麻烦了! 我用 r_weather!

里头的 README 已经把例子写得很清楚了! 去下一个 weather.com 的 sdk 就可以显示天气图片了! 十分方便!

Tags: [ , ] - Comments: Comments
by agate - Published: 2008-09-12 [10:53 下午] - Category: 程序编码

first, install the ruby-debug
$ sudo gem install ruby-debug -y
second, add require into your *.rb files and run it
require "ruby-debug"

when rails web server running. the runtime control file is "config/environments/{env-name}.rb". {env-name} is what depend on the server run's condition. generally we use development env in our develop. so add the "require" into the development.rb

third, add the keyword: "debugger" to make a break-point.

info: link

Tags: [ , ] - Comments: Comments
by agate - Published: 2008-09-04 [3:50 下午] - Category: 程序编码

今天再看 <> 里头其中一位作者的写法给我很大的启示. 在过去我们常常遇到这样的一种判断:
if session[:user_id]
  @user = User.find_by_id(session[:user_id])
else
  xxx
end

文中作者很简单地使用如下代码进行替代:
@user = session[:user_id] && User.find_by_id(session[:user_id])
是不是很简单? 同样还有 "||" 这种或运算啊~ 就是指但前面非 nil 的时候就取前面的值, 如果是 nil 就去后面的值!
同样可以试试看 "&&=" 和 "||=" 这种赋值方式哦~

Tags: [ ] - Comments: Comments