EsKit使用指南
EsKit是一个基于Ruby on Rails的博客系统,嗯,ABitNo造的轮子。一些特点可以参见上一篇文章:低调发布我的 Blog程序
或许你只是需要尝试一下,我为大家部署了一个Demo,你就尽情蹂躏它吧
这里是后台地址:http://eskit.abitno.me/admin
用户名:admin, 密码:rubyonrails
感觉不错吗?想学习Rails?或者想测试下Rails 3写出来的程序?亲自部署一个试试看吧!你的每一次部署都是对俺的支持啊!!你能因此喜欢上Rails我会开心死的!!!假如EsKit让你对Rails开始反感,千万不要告诉我,我喜欢听好听的--囧
安装Ruby
开发使用的ruby 1.9.1p378,还没对其他ruby版本进行测试,推荐你也安装此版本吧,会少些问题,这里是官方FTP ftp://ftp.ruby-lang.org/pub/ruby/1.9/
Linux的源里一般都有这个版本,你要真找不到就到ftp上下载解压,然后
./configure --prefix=/opt/ruby191 make sudo make install
OpenSSL升级后Rails竟然不能用了
今天要测试一个Rails项目,rails s竟然出现这样的错误
/opt/ruby19/lib/ruby/gems/1.9.1/gems/bundler-0.9.18/lib/bundler /runtime.rb:1:in `require': libcrypto.so.0.9.8: cannot open shared object file: No such file or directory - /opt/ruby19/lib/ruby/1.9.1 /i686-linux/digest/sha1.so (LoadError)
我本想给libcrypto.so.1.0.0做个ln的,但还是忍不住想重新把Ruby编译一次,然后就遇到这样的错误
gcc -I. -I../../.ext/include/i686-linux -I../.././include -I../.././ext /openssl -DRUBY_EXTCONF_H=\"extconf.h\" -D_FILE_OFFSET_BITS=64 -fPIC -O2 -g -Wall -Wno-parentheses -o ossl_pkcs7.o -c ossl_pkcs7.c ossl_pkcs7.c:575: error: expected ‘=’, ‘,’, ‘;’, ‘asm’ or ‘__attribute__’ before ‘*’ token ossl_pkcs7.c: In function ‘ossl_pkcs7_set_certificates’:
软件升级就是个杯具啊!!!
幸好ruby已经有了openssl 1.0的patch
http://redmine.ruby-lang.org/issues/show/2022
部署的郁闷和疯狂
基于各种不同的原因,我得去部署两个Rails程序,一个是公司的,一个是我自己的。公司的要部署到我自己的电脑上,这样我就能在家随时写代码了。我自己的就简单了,是一直以来自己梦想的blog,至今未能完成,只有个大体的样子,不能不说自己太懒太懒。。。
公司的代码部署是让我极其郁闷的,本来这个周末我是有任务要完成的,但是今天一早起床没发现照进窗来的大片阳光,朝窗外一看,又下雨了,异常讨厌。。。于是想在家把代码部署好,废了老大的力气才把代码运行起来,最后发现我没有数据,没有数据!!!郁闷了。。。
我就这样一直郁闷着,斗争着要不要去公司把数据导一份过来,外面下的雨实在让人不想出门。。。
过了中午,想着总得找点事做。其实不是我没有事做,而是想做的事情太多,然后就乱成一团,不知道应该做什么好了。就想着把自己的blog给部署到VPS上去吧。。。
------下面开始,没有废话,所有操作无说明均在VPS上进行------
VPS的环境:Debian系统,Nginx服务器,不是我装的,合伙人已经装好了
我要做的第一件事情是把代码给放到vps上,因此给VPS安装Mercurial,也就是汞先生hg。。。
mkdir ~/opt export X=/home/abitno/opt
了解下Rack/MiddleWare/Rails/Metal
忙里偷闲,想看下rails相关的代码,不知何处开始。就先了解一点当下比较火的metal。做下小记录,估计以后很长时间不会再看,以免遗忘。大部分内容来源于这个万恶的资本主义制造的视频
先从Rack开始,Rack的目标很简单
Rack在支持Ruby的WEB服务器和Ruby框架之间提供了一个最精简的interface
一个基于Rack的app其实就是一个Ruby对象,这个对象唯一的要求就是满足这两条spec
1、能够响应call方法,并且接受env参数
2、返回一个数组[status, header, body]
来看一个最简单的Hello world,这里的对象是一个lambda
require 'rubygems' require 'rack' lambda_app = lambda { |env| [200, {"Content-Type" => "text/html"}, "Hello World !"] } Rack::Handler::Mongrel.run lambda_app, :Port => 3000
Rails中Cache的那些事
在Rails中做缓存是简单的,要开启cache的话
config.action_controller.perform_caching = true
默认情况下只有production是true,其他ENV都是false。
Rails中存储cache的方式多了去了,现在用的最多的应该是memcache吧。rails的guildes中有句Page caches are always stored on disk,貌似是所有的page cache都用filestore?在environment.rb中指定使用的store模式
ActionController::Base.cache_store = :file_store, "/path/to/cache/dir"
只要上面两句话都配置好了,下面就简单的在需要cache的地方加几条语句就成
1、Fragment cache
就是缓存一个片段,将需要缓存的内容放入一个block中即可
<% cache do %> something to cache <% end %>
学习Ruby on Rails的小体会
这几天一直做Rails开发,看的书还算有用,至少知道有什么东西可以用,虽然说不怎么会用。
之前都是在看书,并没有真的做东西,一些很小的问题都会浪费时间。比如Memcached这东西,想当然的装好了gem memcached,可还是得到个错误:
'gem_original_require': no such file to load -- memcache
然后就google啊google,时间就这样一点点浪费。其实这也怪我根本不知道memcached工作原理,只要简单的安装个client端的gem就能解决:
gem install memcache_client
ruby中那些枚举类型都有很丰富的方法,不要只想着each啊什么的,那些自己不怎么用的inject,partition什么的功能很强大的。当自己觉得某个功能比较不好实现时,多看看API会很有帮助的,说不准我想的功能在API中已经优雅的实现了。
Ruby是很灵活的,也是相当动态的,但是我写的代码始终都像是Java代码,必须要有意识的把代码写的更Ruby。
不要想当然,比如这么个赋值语句
a = 1, b = 2
安装使用Oniguruma和Ultraviolet
话说前面想到用Ultraviolet来做Rails的SyntaxHighlighter,这个东西真的很强大,使用Textmate的syntax文件,支持相当多的语言和主题
不过它依赖Ruby最新的正则表达式引擎Oniguruma,虽然在Ruby1.9中是标配,但是我现在用的ruby1.8.7,需要自己来安装。
到Oniguruma的官方下载的onig-5.9.1(不知道是不是GFW的问题,我得用代理才能访问,下载不到的找我要啊),然后一般的软件编译安装过程。
接下来就是安装一些gems了
$ gem install oniguruma textpow ultraviolet
具体的使用也很简单,看官方的小demo
不过安装完有个小问题,当我运行uv --help时就出现了一片错误
/usr/lib/ruby/gems/1.8/gems/oniguruma-1.1.0/lib/oregexp.so: libonig.so.2: cannot open shared object file: No such file or directory - /usr/lib/ruby/gems/1.8/gems/oniguruma-1.1.0/lib/oregexp.so (LoadError)