Tag: ruby 1.9

Rails + Ruby 1.9“US-ASCII中的无效字节序列”

升级到ruby 1.9后,我们开始注意到当用户使用非ASCII字符时,无法从rails模板渲染器渲染页面。 特别是“é”。 我能够在其中一台登台服务器上解决此问题,但我无法在我们的生产服务器上重现该修复程序。 似乎第一次工作的修复: 使用此处提供的convert_charset工具将数据库从latin1转换为utf8: http ://www.mysqlperformanceblog.com/2009/03/17/converting-character-sets/。 (包括在my.cnf中设置default_character_set=utf8并运行SET GLOBAL character_set_server=utf8 切换到sam-mysql-ruby适配器(而不是标准的mysql适配器: http : //gemcutter.org/gems/sam-mysql-ruby ) 重启导轨 错误是: “invalid byte sequence in US-ASCII”奇怪的是,按照上述步骤操作后,我们的生产服务器上的错误没有改变。 设置encoding: utf8 database.yml中的encoding: utf8也不会更改错误。 以下代码行引发的错误: 这个博客似乎提出了一个解决方案,但它提到这应该不是1.9中的问题: http : //www.igvita.com/2007/04/11/secure-utf-8-input-in-rails/ (它超过2岁)。 我想这个问题可能会很快影响很多人,因为更多的rails开发人员转向1.9。

在Ruby 1.9中使用instance_eval进行常量查找

短而甜 在Ruby 1.9中运行此代码: FOO = “global constant” class Something FOO = “success!” def self.handle &block self.new.instance_eval &block end end class Other FOO = “wrong constant” def self.handle Something.handle{FOO} end end puts Something.handle{FOO} puts Other.handle 我得到“成功!” 和“错误的常数”。 如何才能同时打印两次“成功!”的电话? 这不是一种人为的乐趣 – 我不会浪费人们的时间。 我有一个现实世界的问题,我已经把它缩小到最简单的例子来certificate这个问题。 继续阅读“为什么”。 一个更彻底的解释 调用Something.handle {FOO}正常工作。 Ruby使用Something类中给出的FOO的定义。 但是,如果我尝试从另一个类中以相同的方式调用它,它会为我提供该类的FOO定义。 我认为Ruby 1.9中更紧密的常量查找的想法是为了避免这样的问题。 instance_eval应该使用其接收器的范围(在本例中为self.new),而不是调用块的范围。 它适用于实例变量之类的东西,但不适用于常量。 这不是优先问题 – 删除“全局”和“错误”常量,而ruby仍然无法找到剩余的正确常量。 我遇到的现实问题是我有一个包含多个类的模块。 […]

Ruby 1.9 Base64编码写入文件错误

我收到以下错误: Encoding::UndefinedConversionError: “\x81” from ASCII-8BIT to UTF-8 以下都在Ruby 1.8.7中工作,所以我认为这与Ruby 1.9如何处理编码有关,但我不太清楚如何解决它。 我目前正在使用Ruby 1.9.3。 decode_base64_content = Base64.decode64(content) File.open(“index.txt”, “w”) do |f| f.write(decode_base64_content) end 内容如下: CgcZAAEAAABQcmVzZW50YXRpb24RMQAGSUIyQjdCNjBCLUZBRTMtMjVGMS1DQ0E1LTM1REM4NjBC MDlCRgYCBklBMjk2OTQ4MC0yMkQyLURENzMtQUY5Ni1DNURDMDIyQTVFRjkGBAZJNUJCRTI3REYt Q0QyRC03NkY0LTk1MUMtQzYxRkYxQjgxN0Y4BgYGSTg0QjM3M0FGLTVFNjEtMkMwMy1DMTBCLUNB MUZCMDY0Q0NERQYIBkkwOTIwNDRBRC02QTQ5LTg0NzEtMzc5QS0yRjQxMzU2MUY0OUQGCgZJODlC NDczOTUtOTk1MS01OTk1LTk4NDctNkU1NjI4RjhGNjYzBgwGSThCQ0RFM0VDLUMyREItMDkyNy1G NTFFLTJGNDE4OEMzNURDMwYOBklGMDk5QkRDOC1GOEFDLTg1QjEtMjgzMC0yRjQ5RkZFMDFCNUEG EAZJNTJCOEQ3RUItMzZEQi1CMjNELUU2MTYtMkY0QjUxNDIwMjBFBhIGSUM2RjkzNjgwLTFBNjMt NzU5Qi0yOEE5LTUwMDc2NjZCOEYyNgYUBkk2MDIwRjg4Ni1BQTk4LTRBNDQtQjZGNS1DNDAyMTMz NzEzOEQGFgZJRDFEMjcxMzYtQTkwQy0xRDBBLTc4RjAtQ0ExRUFCQzgzRUE1BhgGSUZBRDQzMjI1 LTUwODctNENEMy1ENjkzLUQ4Qzg0NDc3RTMyRAYaBklFMjc5NjA5Mi0xNUYzLUY4NkItMEFBQi0x MUEzQjIwNEFBRTIGHAZJNERFNEYzNUItQzAyNy1DOTQ1LTY2MzUtMDE4NTZDRTdBMDM3Bh4GSUM4 NjA4RkI4LUI4RDEtMjM5RS04ODY4LUNBMjIzNUUwNjk5MAYgBkk4QjcxOEFDRi03NEE0LTA4REQt QzZENC1DQTEyNDQwRTkzOUYGIgZJQjA3NTk0OEMtQzA3MS0wQTQ3LTYxNDQtNEU1OUIwN0QwQ0VF BiQGSUM2M0VFQkU1LUZFOEEtRUVDMC1GNDFFLTc3QTI3Qzg2RDE1OAYmBkk5QkQ2M0NEQi02NDg2 LTM2OUQtMTY0NS0xMDIzMTQ5Njk1OUQGKAZJOTI3NDUzNDEtRUYzRC04MEU1LUZDQkUtQ0EyMTZG Q0FGRTcyBioGSUI3MzlFMTBFLTk2M0QtMDA0Ny1EMkU1LUNBMjA2ODM2MjZFNgYsBkk4RUY5QkZB Ni0wNDAyLTQwQUQtRjAxQi0xMTRBNDBFODMwRjMGLgZJQjY2N0YxODktNzQ4My05RkE4LTYwMDkt 持续约3000行。 如何解决此转换错误? 上面的代码段工作但在3000行的某处,我认为base64解码方法使用无效编码。 谢谢!

错误’不兼容的字符编码:ASCII-8BIT和UTF-8’由于8位编码的cookie(Rails 3和Ruby 1.9)

我移动了一个使用1.8.7到1.9.2的网络应用程序,现在我不断获取 incompatible character encodings: ASCII-8BIT and UTF-8 我的数据库编码为UTF-8,我也有’config.encoding =“utf-8”’。 我看到了一些想法可能的解决方法,我补充说 Encoding.default_external = Encoding::UTF_8 Encoding.default_internal = Encoding::UTF_8 但它也没有用。 我收到此错误的一个特定代码块是 %ul.address – @user.address.split(‘,’).each do |line| %li= line.titleize 我正在使用HAML,我检查了line.titleize,编码是UTF-8。 似乎模板是用ASCII-8BIT渲染的,每当我尝试渲染像’ñ’这样的字符时它就会被搞砸 我正在使用Rails 3.0.5。 我读过詹姆斯爱德华格雷的post,但我仍然可以弄明白发生了什么;(。 我真的很感激任何帮助:D。 我也尝试过: “string”.force_encoding(“UTF-8”) 和 # encoding: utf-8 没有运气。 固定 看评论。

如何在Ruby正则表达式中匹配韩语字符?

我对使用正则表达式的用户名进行了一些基本validation,比如[\w-_]+ ,我想添加对韩语字母的支持,同时仍然保持validation相同。 我不想允许特殊字符,例如{}[]!@#$%^&*()等,我只想用除了[a-zA-Z0-9]之外的匹配给定字母的东西替换\w [a-zA-Z0-9] 。 这意味着像안녕 username这样的用户名应该有效,但不是안녕[] 。 我需要在Ruby 1.9中这样做。

使用omniauth的谷歌open_id连接失败

我正在尝试向我的应用添加open-idfunction,我正在使用omniauth和omniauth-openid gems。 我已经完成了安装步骤,将其作为中间件添加到初始化程序中, require ‘omniauth-openid’ require ‘openid/store/filesystem’ Rails.application.config.middleware.use OmniAuth::Builder do provider :open_id, :store => OpenID::Store::Filesystem.new(‘/tmp’) end 以及用于回调的路由 match ‘/auth/:provider/callback’ => ‘callback#myauthentication’ 当我尝试点击此url时,连接到谷歌提供商 http://[mydomain]/auth/open_id?openid_url=https%3A%2F%2Fwww.google.com%2Faccounts%2Fo8%2Fid 我每次都得到连接失败错误 对于雅虎 http:// [mydomain] /auth/open_id?openid_url=http%3A%2F%2Fme.yahoo.com%2F 如果我尝试使用yahoo open id,即使正确validation后我也会收到invalid_credentials错误更新1:我正在使用apache web服务器和thin / webrick应用服务器。 我validation了如果我不在apache web服务器后面并直接以localhost:3000运行它可以正常工作。 为什么omniauth表现不同

确保父进程终止时孤立进程被终止

在Ruby中,我如何确保从我的程序中生成的子进程在主进程退出或被杀死时不继续运行? 最初我以为我可以在主进程中使用at_exit ,但是如果我的主进程被kill -9 ed或者调用Kernel.exec ,这将Kernel.exec 。 我需要一个(基本上)万无一失的跨平台解决方案。

访问子进程的STDIN而不捕获STDOUT或STDERR

在Ruby中,是否可以防止生成的子进程的标准输入附加到终端而不必捕获同一进程的STDOUT或STDERR ? 反引号和x字符串( `…` , %x{…} )不起作用,因为它们捕获STDIN。 Kernel#system不起作用,因为它将STDIN连接到终端(拦截像^C这样的信号并阻止它们到达我的程序,这是我试图避免的)。 Open3不起作用,因为它的方法捕获STDOUT或STDOUT和STDERR 。 那我该怎么用?

在本地安装ruby-debug19

我目前在Windows XP 32位机器上运行Ruby 1.9.2p0。 自从我们升级到Ruby 1.9以来,我无法进行任何forms的调试。 我被告知你需要新的ruby-debug19 gem才能让事情运行起来。 问题是,我公司的代理阻止了gem依赖管理器连接外部存储库。 没关系,我只是自己下载gem并在本地安装它。 结果: ERROR: Error installing ruby-debug19-0.11.6.gem: ERROR: Failed to build gem native extension. C:/Ruby192/bin/ruby.exe extconf.rb –with-ruby-include=C:\Ruby192\include checking for vm_core.h… no checking for vm_core.h… no *** extconf.rb failed *** Could not create Makefile due to some reason, probably lack of necessary libraries and/or headers. Check the mkmf.log […]

尝试启动rails控制台时,为什么会出现Readline错误?

更新:我可能在尝试在其他地方找到解决方案时弄乱了我的系统。 我从零开始,安装Ruby 1.9.3顺利安装。 现在试着让ree-1.8.7和…一起玩得很好…… 我正在尝试使用RVM在Kubuntu上安装Ruby 1.9.3(我相信11.10)。 到目前为止,我一直有很多关于Readline的问题,但除此之外我找到了答案。 我用这种方式安装了Ruby 1.9.3: rvm install 1.9.3 # Install of ruby-1.9.3-p0 – #complete cd ~/.rvm/src/ruby-1.9.3-p0/ext/readline/ ~/.rvm/src/ruby-1.9.3-p0/ext/readline $ ../../ruby extconf.rb –with-editline-dir=”/usr” –with-readline-dir=”/usr” # any other way of doing this resulted in simply readline not being loaded when trying to start the console # I have libreadline6 and libreadline6-dev installed (and all […]