在我看来,带有ruby 1.9的YAML库是编码聋的.
这意味着当生成YAML时,它将获取任何字节串,并转义任何不输出干净ASCII的字节序列.那是蹩脚的,但可以接受.
我的问题是另一种方式.从所述YAML转储加载内容时.
在下面的示例中,我创建了一个UTF-8字符串,转储它,它与类型一起转储!binary.当我加载它时,它具有编码ASCII-8BIT.在示例的最后,我尝试使用另一个UTF-8字符串连接原始字符串和重新加载的字符串.后者将以失败告终Encoding::CompatibilityError.
require 'yaml'
s0 = "Iñtërnâtiônàlizætiøn"
y = s0.to_yaml
s1 = YAML::load y
puts s0 # => Iñtërnâtiônàlizætiøn
puts s0.encoding # => UTF-8
puts s1 # => Iñtërnâtiônàlizætiøn
puts s1.encoding # => ASCII-8BIT
puts y # => --- !binary |
# ScOxdMOrcm7DonRpw7Ruw6BsaXrDpnRpw7hu
puts "ñårƒ" + s0 # => ñårƒIñtërnâtiônàlizætiøn
puts "ñårƒ" + s1 # => Encoding::CompatibilityError: incompatible character encodings: UTF-8 and ASCII-8BIT
Run Code Online (Sandbox Code Playgroud)
我想很清楚当你处理一些包含嵌套哈希和带叶子串的数组的YAML源时,这会很快导致麻烦.
目前我有一些代码遍历所有哈希和数组并调用force_encoding每个字符串.至少可以说,这是不雅观的.
我现在正在寻找的是一种方法来告诉YAML::load任何进来的字符串应该被视为,因此其编码设置为UTF-8.
理想情况下,ruby的YAML应该使用正确的编码来注释它转储的字符串.有一个Ya2YAML项目试图转储UTF-8安全YAML.我不确定它有多远.如果有人玩过它,我欢迎任何想法.
无论如何,我仍然有这些转储没有任何编码信息来处理.虽然我知道它们都是UTF-8.
我想编写一个脚本,当在某个应用程序上打开文档时,或者在应用程序退出之前,它会采取行动等.
有没有办法将脚本附加到应用程序中的事件?AppleScript是否支持任何形式的挂钩?
如果没有,我可以通过自己的方式获得我想要的东西吗?
我想为Web和桌面应用程序绘制用户界面.
我需要一些比omnigraffle更少印刷的东西.想像素!
此外,需要良好的构建块(又名模板).表单元素,表格视图等
对于我在Mac上的任何应用程序,有没有办法判断它是在启用GC的情况下编译的,还是在进行手动内存管理?
我已经看了一千次,我总是忘记它,所以,这里是永恒的:
Solaris有一些尴尬的语法tail.
我该如何做相当于BSD的?tail -nN
我想要的是尾部输入的最后N行.
我需要一个能够从git存储库中获取但不能推送到它的应用程序,因此,这是只读部分.这可以通过git守护进程轻松完成.
最重要的是,我需要访问所述存储库以受密码保护,包括用于读取它.因此,在任何提取发生之前,应用程序将需要进行身份验证.
它可行吗?用git守护进程?别的什么?http + auth可能吗?
更详细地说,我有一个模块Narf,它为一系列类提供基本功能.具体来说,我想影响所有继承的类Enumerable.所以我include Narf在Enumerable.
Array是一个Enumerable默认包含的类.然而,它并没有受到Narf模块中后期包含的影响.
有趣的是,包含后定义的类Narf来自Enumerable.
# This module provides essential features
module Narf
def narf?
puts "(from #{self.class}) ZORT!"
end
end
# I want all Enumerables to be able to Narf
module Enumerable
include Narf
end
# Fjord is an Enumerable defined *after* including Narf in Enumerable
class Fjord
include Enumerable
end
p Enumerable.ancestors # Notice that Narf *is* there
p Fjord.ancestors # …Run Code Online (Sandbox Code Playgroud) 所以ruby 1.9非常好,因为它会自动需要rubygems,因此当你打电话require 'somegem'而不需要首先需要rubygems时它会起作用,这通常很棒.
但我有大量使用ruby的shell脚本,它们通常不依赖于rubygems.Shell工具应该立即运行,并且什么都不加载rubygems是一个主要障碍,主要是因为它涉及一堆磁盘操作与分散的小文件.
我希望能够在运行这些shell脚本时告诉ruby跳过加载gem.理想情况下,像#!ruby --no-rubygemsshebang线一样.
有这样的事吗?或者可能是一个编译选项,它将告诉ruby rubygems必须手动需要?
在我的Gemfile中,我需要使用此行的自定义源中的gem:
gem 'very-secret-gem', source:'https://foo.example.com/'
Run Code Online (Sandbox Code Playgroud)
bundle install 完成罚款:
$ bundle install
Fetching source index from https://foo.example.com/
Fetching source index from https://foo.example.com/
Fetching gem metadata from https://rubygems.org/........
…
Resolving dependencies...
…
Installing very-secret-gem 1.5.1
…
Bundle complete! 47 Gemfile dependencies, 116 gems now installed.
Use `bundle show [gemname]` to see where a bundled gem is installed.
Run Code Online (Sandbox Code Playgroud)
但运行使用ruby的命令失败(这里为空Rakefile):
$ bundle exec rake -T
Could not find gem 'very-secret-gem (>= 0) ruby' in rubygems repository https://foo.example.com/.
Source does not contain any versions of 'very-secret-gem …Run Code Online (Sandbox Code Playgroud) 我正在尝试将自签名证书添加到Heroku上的某个应用程序中.我跟随开发中心的指南.
https://devcenter.heroku.com/articles/ssl和https://devcenter.heroku.com/articles/ssl-certificate-self
在我生成自签名证书后,我尝试通过heroku证书添加证书:add server.crt server.key
并收到错误消息:解决信任链...失败!没有给出的证书是域名证书.
我不确定这意味着什么或如何解决问题.