之前我问了一个类似的问题,但回答不充分,所以我想我会在这里再问,但提供更多信息.我需要获得不同的和旧版本的git存储库,我遇到了麻烦.我试过的是
git checkout master~X
git archive --format zip --output /full/path/to/zipfile.zip master
git checkout master
git checkout master~Y
git archive --format zip --output /full/path/toDifferent/zipfile.zip master
git checkout master
Run Code Online (Sandbox Code Playgroud)
解压缩后,它们最终完全一样.我无法弄清楚为什么或如何解决它.
什么时候Ruby对象需要被污染,什么时候应该解开它们?受污染对象的概念如何使Ruby脚本以安全模式运行?任何人都可以详细说明这一点,以便用一些代码片段清楚地理解这个概念吗?
我正在研究一个在Heroku上托管的rails项目.我想知道是否可以更新一个文件,而无需重新启动应用程序.
为什么.我有一个错误,但我无法追踪它.它在我的本地系统上完美运行,但它似乎停止在heroku处理中途.
由于没有断点,我在代码中散布状态更新.(稍后将删除)但是向rails应用程序添加一行代码就像是一个五分钟的过程.
有没有办法推动git而不运行所有其他东西?也许是一个特殊的参数添加到推?
我有一个包含我想要运行的命令行的文件.该文件包含大约2,000行.
我有8个核心可用.是否可以解析文件并启动8个进程,然后在其中一个程序完成时从文件中执行另一个进程?我希望这一直持续到文件结束.
我发现了一个有趣但无法解释的替代方案.代码清楚地在REPL中起作用.例如:
module Foo
class Bar
def baz
end
end
end
Foo.constants.map(&Foo.method(:const_get)).grep(Class)
=> [Foo::Bar]
Run Code Online (Sandbox Code Playgroud)
但是,我并不完全理解这里使用的习语.特别是,我不理解使用&Foo,这似乎是某种闭包,或者#grep的这种特定调用如何对结果进行操作.
到目前为止,我已经能够解析这部分内容了,但我并没有真正看到它们是如何组合在一起的.以下是我认为我对示例代码的理解.
Foo.constants 返回模块常量数组作为符号.
method(:const_get)使用Object#方法执行方法查找并返回闭包.
Foo.method(:const_get).call :Bar 是一个闭包,它返回类中常量的限定路径.
&Foo似乎是某种特殊的lambda.文档说:
如果Proc对象由&参数给出,&参数将保留技巧.
我不确定我是否完全理解这在特定背景下的含义.为什么选择Proc?什么"诡计",为什么这里有必要?
grep(Class)正在运行#map方法的值,但其功能并不明显.
为什么这个#map构造返回一个greppable Array而不是Enumerator?
Foo.constants.map(&Foo.method(:const_get)).class
=> Array
Run Code Online (Sandbox Code Playgroud)如何为一个名为Class的类的grepping实际工作,为什么这里需要特定的构造?
[Foo::Bar].grep Class
=> [Foo::Bar]
Run Code Online (Sandbox Code Playgroud)我真的很想完全理解这个成语.任何人都可以在这里填补空白,并解释这些部分是如何组合在一起的吗?
除了某些单词列表外,如何使用正则表达式匹配任何单词(\ w)?例如:
我希望匹配单词use和utilize之后的任何单词,除非单词是something或fish.
use this <-- match
utilize that <-- match
use something <-- don't want to match this
utilize fish <-- don't want to match this
Run Code Online (Sandbox Code Playgroud)
如何指定我不想匹配的单词列表?
有没有办法检查一个字符串数组中是否存在字符串 - 没有遍历数组?
例如,给定下面的脚本,我如何正确地实现它来测试存储在变量$ test中的值是否存在于$ array中?
array=('hello' 'world' 'my' 'name' 'is' 'perseus')
#pseudo code
$test='henry'
if [$array[$test]]
then
do something
else
something else
fi
Run Code Online (Sandbox Code Playgroud)
注意
我正在使用bash 4.1.5
一个ruby文件:
gem "my-gem", git: "https://github.com/gem123.git", branch: "some-branch"
require "my-gem"
var1 = SomeGem::some_method123
puts var1
Run Code Online (Sandbox Code Playgroud)
它说Could not find 'my-gem' (>= 0) among 330 total gem(s) (Gem::LoadError).为什么不?我需要一个gem的特殊分支,不想克隆存储库.
我的模型(用户)中有以下验证:
validates :first_name,:length => {:minimum => 2,:maximum => 50},:format => { :with => /[a-zA-Z]+/ }
Run Code Online (Sandbox Code Playgroud)
我的yml语言环境文件中有以下内容:
attributes:
first_name:
too_short: "First name is too short"
too_long: "First name is too long"
invalid: "First name is not valid"
Run Code Online (Sandbox Code Playgroud)
现在,如果我开始rails console,并写下以下内容:
a = User.new
a.valid?
a.errors.full_messages
Run Code Online (Sandbox Code Playgroud)
我会看到以下错误:
["First name First name is too short", "First name First name is not valid"]
Run Code Online (Sandbox Code Playgroud)
如您所见,属性名称也预先添加到字段错误中.到目前为止,在我的代码中,我已经使用了model.errors[:field],这将始终显示我在yml文件中的字符串,但我想将字符串更改为:
attributes:
first_name:
too_short: " is too short"
too_long: " is too long"
invalid: " is not valid" …Run Code Online (Sandbox Code Playgroud) 为什么在单独尝试锁定文件时,Ruby的File#flock不能按预期工作?锁定块中的文件不是解决此问题的正确方法,因为重点是显示锁定持久锁的行为.在块中使用File#flock会在块退出时释放锁定,因此它不能正确显示问题.
File#flock以各种方式失败,尤其是在请求非阻塞锁定时.一些例子如下.
使用多个独占锁时无限等待,因为#flock不提供超时锁定请求的方法.
# First lock succeeds.
f1 = File.open('foo', File::RDWR|File::CREAT, 0644)
f1.flock(File::LOCK_EX)
# => 0
# This never returns.
f2 = File.open('foo', File::RDWR|File::CREAT, 0644)
f2.flock(File::LOCK_EX)
Run Code Online (Sandbox Code Playgroud)在文件被独占锁定时请求非阻塞锁定会导致无效的参数异常.
f1 = File.open('foo', File::RDWR|File::CREAT, 0644)
f1.flock(File::LOCK_EX)
# => 0
f2 = File.open('foo', File::RDWR|File::CREAT, 0644)
f2.flock(File::LOCK_NB)
# => Errno::EINVAL: Invalid argument - foo
Run Code Online (Sandbox Code Playgroud)文档说#flock"根据locking_constant(逻辑或下表中的值)锁定或解锁文件." 但是,Logical OR会提升Errno::EINVAL或Errno::EBADF取决于平台.
f1 = File.open('foo', File::RDWR|File::CREAT, 0644)
f1.flock(File::LOCK_EX)
# => 0
f2 = File.open('foo', File::RDWR|File::CREAT, 0644)
f2.flock(File::LOCK_NB || File::LOCK_EX)
# …Run Code Online (Sandbox Code Playgroud)