Mar
22
2011
最近折腾一网站
从 windows ruby 1.8.7 + rails 2.3.5
到 windows ruby 1.8.7 + rails 3.0.3
又到 windows ruby 1.9.2 + rails 3.0.3
又到 linux ruby 1.9.2 + rails 3.0.3
中间确实相当的折腾人,下面记录一下折腾出来的经验吧
rails 2.3 到 rails 3 需要改的多了,这个跳过,这里重点说说其他的
windows 上 从 ruby 1.8.7 + rails 3.0.3 到 ruby 1.9.2 + rails 3.0.3
安装:用 RubyInstaller 提供的安装即可,下载在这里 http://rubyforge.org/frs/?group_id=167
常见错误一:rake db:migrate 时出现错误:
...rubygems.rb:340:in `bin_path': can't find executable rake for rake-0.8.7 (Gem::Exception)
解决方法:ruby1.9.2安装目录 /lib/ruby/gems/1.9.1/specifications/下删除 rake.gemspec 文件
常见错误二:rails server 时出现错误:
Could not find gem 'sqlite3-ruby' in any of the gem sources.
解决方法:这是由于我们使用的是 sqlite3-ruby 1.2.5 的缘故,在1.8.7下没问题,到了1.9.2下后编码的原因必须用1.3.1 + 的sqlite3-ruby 版本,这里还要注意的是 1.3.1 必须要 sqlite3 的新版本,安装的时候会提示你的,我down了最新的 3.7.4 用了
在 Gemfile 中这样写 gem 'sqlite3-ruby', '1.3.1', :require => 'sqlite3' 再 bundle install 就ok 了
ruby 1.9.2 + rails 3.0.3 从 windows 到 linux
常见错误1:bundle install 后 bundle list 提示下面的错误,而此时 bundle install 一切正常,gem list 也有rake
Gems included by the bundle:
Could not find rake-0.8.7 in any of the sources
还有一个现象是 bundle install 的时候全部弄到这个目录去了 vender\cache
这个问题折腾了好长时间,最后才发现时bundler 的问题
解决方法:修改 .bundle/config 文件,BUNDLE_PATH: vendor\cache 看到了吧,呵
常见问题2:incompatible character encodings: ASCII-8BIT and UTF-8
这个问题可能的原因多了,网上也很多方法,如果碰到了都试试,呵
这里说下网上没的讲到的一个原因,就是 sqlite3-ruby 的版本的问题
如果你sql查到的结果中没中文正常,有中文就跳这个错误的话,那就是 sqlite3-ruby 的版本的问题了,从 1.2.5 换到 1.3.1+ 就没问题啦,哈。因为sqlite3 默认的读取方式就是 utf-8 ,所以这里不用考虑database.yml 中的设置问题,如果是 mysql 就要考虑了
续记:网上提到的 incompatible character encodings: ASCII-8BIT and UTF-8 的一些解决方法:
1、Adding to application.rb:
Encoding.default_external = Encoding::UTF_8
or
Encoding.default_internal = 'utf-8'
2、Adding to application.erb.html head:
<%# # -*- coding: UTF-8 -*- %>
3、Adding to any view templates head:
<%# coding: utf-8 %>
4、Unfortunately adding "encoding: utf-8" to the database.yml did not have any effect.
后记:mysql2 有了win版本 mysql2-0.2.6-x86-mingw32.gem ,哈哈
从 windows ruby 1.8.7 + rails 2.3.5
到 windows ruby 1.8.7 + rails 3.0.3
又到 windows ruby 1.9.2 + rails 3.0.3
又到 linux ruby 1.9.2 + rails 3.0.3
中间确实相当的折腾人,下面记录一下折腾出来的经验吧
rails 2.3 到 rails 3 需要改的多了,这个跳过,这里重点说说其他的
windows 上 从 ruby 1.8.7 + rails 3.0.3 到 ruby 1.9.2 + rails 3.0.3
安装:用 RubyInstaller 提供的安装即可,下载在这里 http://rubyforge.org/frs/?group_id=167
常见错误一:rake db:migrate 时出现错误:
...rubygems.rb:340:in `bin_path': can't find executable rake for rake-0.8.7 (Gem::Exception)
解决方法:ruby1.9.2安装目录 /lib/ruby/gems/1.9.1/specifications/下删除 rake.gemspec 文件
常见错误二:rails server 时出现错误:
Could not find gem 'sqlite3-ruby' in any of the gem sources.
解决方法:这是由于我们使用的是 sqlite3-ruby 1.2.5 的缘故,在1.8.7下没问题,到了1.9.2下后编码的原因必须用1.3.1 + 的sqlite3-ruby 版本,这里还要注意的是 1.3.1 必须要 sqlite3 的新版本,安装的时候会提示你的,我down了最新的 3.7.4 用了
在 Gemfile 中这样写 gem 'sqlite3-ruby', '1.3.1', :require => 'sqlite3' 再 bundle install 就ok 了
ruby 1.9.2 + rails 3.0.3 从 windows 到 linux
常见错误1:bundle install 后 bundle list 提示下面的错误,而此时 bundle install 一切正常,gem list 也有rake
Gems included by the bundle:
Could not find rake-0.8.7 in any of the sources
还有一个现象是 bundle install 的时候全部弄到这个目录去了 vender\cache
这个问题折腾了好长时间,最后才发现时bundler 的问题
解决方法:修改 .bundle/config 文件,BUNDLE_PATH: vendor\cache 看到了吧,呵
常见问题2:incompatible character encodings: ASCII-8BIT and UTF-8
这个问题可能的原因多了,网上也很多方法,如果碰到了都试试,呵
这里说下网上没的讲到的一个原因,就是 sqlite3-ruby 的版本的问题
如果你sql查到的结果中没中文正常,有中文就跳这个错误的话,那就是 sqlite3-ruby 的版本的问题了,从 1.2.5 换到 1.3.1+ 就没问题啦,哈。因为sqlite3 默认的读取方式就是 utf-8 ,所以这里不用考虑database.yml 中的设置问题,如果是 mysql 就要考虑了
续记:网上提到的 incompatible character encodings: ASCII-8BIT and UTF-8 的一些解决方法:
1、Adding to application.rb:
Encoding.default_external = Encoding::UTF_8
or
Encoding.default_internal = 'utf-8'
2、Adding to application.erb.html head:
<%# # -*- coding: UTF-8 -*- %>
3、Adding to any view templates head:
<%# coding: utf-8 %>
4、Unfortunately adding "encoding: utf-8" to the database.yml did not have any effect.
后记:mysql2 有了win版本 mysql2-0.2.6-x86-mingw32.gem ,哈哈
类别:ruby & rails | Tags: 原创 , 学习笔记 , gem , sqlite3 , 数据库 , mysql , activerecord , 编码 , 思路 | 0 条评论, 911 次阅读
Jan
10
2011
create_table 的参数 :options 处设置字符集
字段 非空、默认值、字符长度限制设置
add_index 用来设置索引,不可重复用 :unique 参数
class CreateUsers < ActiveRecord::Migration
def self.up
create_table :users, :options=>"DEFAULT CHARSET=UTF8" do |t|
t.string :User, :null=>false, :limit=>16
t.string :Password, :null=>false, :limit=>40
t.boolean :Status, :null=>false, :default=>1
t.text :Comment
t.timestamps
end
add_index :users, :User, :name=>"users_User_index", :unique=>true
end
def self.down
drop_table :users
end
end
字段 非空、默认值、字符长度限制设置
add_index 用来设置索引,不可重复用 :unique 参数
class CreateUsers < ActiveRecord::Migration
def self.up
create_table :users, :options=>"DEFAULT CHARSET=UTF8" do |t|
t.string :User, :null=>false, :limit=>16
t.string :Password, :null=>false, :limit=>40
t.boolean :Status, :null=>false, :default=>1
t.text :Comment
t.timestamps
end
add_index :users, :User, :name=>"users_User_index", :unique=>true
end
def self.down
drop_table :users
end
end
Jun
21
2010
红伞升级代理服务器 中是否需使用 squid
20:30 , vkill
这个是前段时间做实验的时候的东西,现在记下来
upd.avira.net.cn 运行也大半年了。以前一次偶然的机会,quay776 说是使用iis后avira填代理地址为iis地址后可以升级,觉得不能理解,后来使用了 nginx 也可以,就慢慢的了解了下,觉得应该是 反向代理 的作用,虽然iis 是否有 反向代理 的功能无处可查。
好了,既然用 nginx 可以实现avira代理地址中填入nginx的地址可以升级,那么我们为啥还要讨论是否需要使用 squid 那。
记得以前我想过,avira 使用代理的时候也可以填用户名和密码的,那么我们可以适当的做点限制,比如说我们可以给不填用户名和密码的用户限速,给填入用户名和密码的用户不限速,这样可以适当的适当的解决点经济问题,毕竟vps还是每月200元租用费的;还有我们可以收集下用户的key,用来做统计用,如果过多用户使用一个key来升级的话,可以禁掉这个key,这也就变相的实现了官方是怎么封key的了。
好了,有了需求,那我们就来想办法实现,对于这两个问题nginx 都无法实现:
第一个问题:也许你会说,nginx 有 ngx_http_auth_pam_module 模块可以使用mysql中用户来认证的,但是你如果试试就知道了,nginx 的这个认证是 http 认证,而非 proxy 认证,而squid 提供的认证,是http认证,也是proxy认证,squid可以使用 auth_param 指令来使用外部script 来认证,它会给外部script传递参数的(包括用户名和密码),可以使用外部script的话,那就可以去查询mysql了,当然就可以使用 mysql 中用户了,这点我已经实验过,可行
第二个问题:nginx 我查了好多资料,应该是没法实现(自己写module另论),而squid 有个 external_acl_type 外部acl指令,也可以指定外部script,它给外部script传递参数(可包括http header中所有),而你avira升级的时候,http header 中是包括了你的key sn的,所以就可以把你key sn保存到mysql中,接下来禁止你这个key使用本代理升级就很好实现了,我相信官方判断是否一个key多人用来升级也是类似这个方法
好了,大概意思就是这样,当然实现起来还是需要点时间的,不过只要思路通了,剩下的事情还难吗?
当然实际使用中,使用 nginx 还是使用 squid+nginx 这个得看需求。
upd.avira.net.cn 运行也大半年了。以前一次偶然的机会,quay776 说是使用iis后avira填代理地址为iis地址后可以升级,觉得不能理解,后来使用了 nginx 也可以,就慢慢的了解了下,觉得应该是 反向代理 的作用,虽然iis 是否有 反向代理 的功能无处可查。
好了,既然用 nginx 可以实现avira代理地址中填入nginx的地址可以升级,那么我们为啥还要讨论是否需要使用 squid 那。
记得以前我想过,avira 使用代理的时候也可以填用户名和密码的,那么我们可以适当的做点限制,比如说我们可以给不填用户名和密码的用户限速,给填入用户名和密码的用户不限速,这样可以适当的适当的解决点经济问题,毕竟vps还是每月200元租用费的;还有我们可以收集下用户的key,用来做统计用,如果过多用户使用一个key来升级的话,可以禁掉这个key,这也就变相的实现了官方是怎么封key的了。
好了,有了需求,那我们就来想办法实现,对于这两个问题nginx 都无法实现:
第一个问题:也许你会说,nginx 有 ngx_http_auth_pam_module 模块可以使用mysql中用户来认证的,但是你如果试试就知道了,nginx 的这个认证是 http 认证,而非 proxy 认证,而squid 提供的认证,是http认证,也是proxy认证,squid可以使用 auth_param 指令来使用外部script 来认证,它会给外部script传递参数的(包括用户名和密码),可以使用外部script的话,那就可以去查询mysql了,当然就可以使用 mysql 中用户了,这点我已经实验过,可行
第二个问题:nginx 我查了好多资料,应该是没法实现(自己写module另论),而squid 有个 external_acl_type 外部acl指令,也可以指定外部script,它给外部script传递参数(可包括http header中所有),而你avira升级的时候,http header 中是包括了你的key sn的,所以就可以把你key sn保存到mysql中,接下来禁止你这个key使用本代理升级就很好实现了,我相信官方判断是否一个key多人用来升级也是类似这个方法
好了,大概意思就是这样,当然实现起来还是需要点时间的,不过只要思路通了,剩下的事情还难吗?
当然实际使用中,使用 nginx 还是使用 squid+nginx 这个得看需求。
May
13
2010
论 vsftpd 限制用户目录空间大小
18:25 , vkill
May
11
2010
ruby 写的 squid 用户验证辅助器
23:25 , vkill
因在win上工作,基于mysql的已有的验证辅助器好像不适合win,linux可以使用pam或mysql_auth,所以就自己写了个
具体的api看这篇文章http://www.squid-cache.net.cn/book/chap12.html
自己写验证辅助器的重点就在于定义 $stdout 不能缓存,就为这个,折腾了我一个晚上
还有,现在的脚本是自动判断是 基本验证 还是 摘要式验证 的,所以数据库中密码必须是明文
代码:
具体的api看这篇文章http://www.squid-cache.net.cn/book/chap12.html
自己写验证辅助器的重点就在于定义 $stdout 不能缓存,就为这个,折腾了我一个晚上
还有,现在的脚本是自动判断是 基本验证 还是 摘要式验证 的,所以数据库中密码必须是明文
代码:
>> Read more
Apr
8
2010



