yal*_*tar 7 ruby string rake ruby-on-rails
我正在尝试为数据库迁移解密一堆密码.我有一些旧的Rails代码(实际上是一个Runner脚本),可以很好地解密它们.但是将相同的代码放入Rake任务会导致任务失败,并且...未定义的方法`to_a'表示"secretkey":String ...
为什么在Rake任务中调用字符串上的to_a无效,但在Runner脚本中完全有效?
require 'openssl'
KEY = 'secretkey'
namespace :import do
task :users => :environment do
def decrypt_password(pw)
cipher = OpenSSL::Cipher::Cipher.new('bf-ecb')
cipher.decrypt
cipher.key = KEY.to_a.pack('H*') <<--------- FAILS RIGHT HERE on to_a
data = data.to_a.pack('H*')
data = cipher.update(data)
data << cipher.final
unpad(data)
end
end
... other methods
end
Run Code Online (Sandbox Code Playgroud)
(Rails 3.0.0,Ruby 1.9.2)
tih*_*ihm 18
要复制1.8.7功能:
1.8.7 > 'foo'.to_a # => ['foo']
Run Code Online (Sandbox Code Playgroud)
你会用:
1.9.3 > 'foo'.lines.to_a # => ['foo']
Run Code Online (Sandbox Code Playgroud)
其他答案建议#chars,这是不一样的:
1.9.9 > 'foo'.chars.to_a # => ['f', 'o', 'o']
Run Code Online (Sandbox Code Playgroud)
JRL*_*JRL 12
在ruby 1.9中,String不再有to_a
方法.您的旧代码可能使用了Ruby 1.8,但确实如此.
字符串对象没有to_a
.见这里:http:
//ruby-doc.org/ruby-1.9/classes/String.html
您可以使用:
"foo".chars.to_a
Run Code Online (Sandbox Code Playgroud)
结果如下:
["f","o","o"]
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
8138 次 |
最近记录: |