在使用多阶段扩展的Capistrano中,我有两个环境:prod和testing.
我需要在prod.rb中不需要的tests.rb中的一些变量,我希望我的一些任务能够检查变量是否已定义并在其中使用它,但如果未设置则忽略它.
所以,在testing.rb中我会有类似的东西:
set :foo, 'bar'
Run Code Online (Sandbox Code Playgroud)
prod.rb不会引用:foo,因为它不需要它.在我的一项任务中,我想做的事情如下:
if defined?(foo)
# do something with foo
else
# do something without foo
end
Run Code Online (Sandbox Code Playgroud)
但我一直收到错误:
undefined local variable or method 'foo'
Run Code Online (Sandbox Code Playgroud)
有没有办法在任务中测试未定义的全局变量?或者我必须做以下事情:
set :foo, ''
Run Code Online (Sandbox Code Playgroud)
在我的所有环境中,不需要:foo变量?
我有一个至少有几百万行的表和一个看起来大致如下的所有整数的模式:
start
stop
first_user_id
second_user_id
Run Code Online (Sandbox Code Playgroud)
使用以下查询拉取行:
SELECT *
FROM tbl_name
WHERE stop >= M
AND first_user_id=N
AND second_user_id=N
ORDER BY start ASC
SELECT *
FROM tbl_name
WHERE stop >= M
AND first_user_id=N
ORDER BY start ASC
Run Code Online (Sandbox Code Playgroud)
我无法找出加速这些查询的最佳索引.问题似乎是ORDER BY,因为当我把它拿出来时查询速度很快.
我使用标准索引格式尝试了所有不同类型的索引:
ALTER TABLE tbl_name ADD INDEX index_name (index_col_1,index_col_2,...)
Run Code Online (Sandbox Code Playgroud)
而且他们似乎都没有加快查询速度.有谁知道什么索引可以工作?另外,我应该尝试不同类型的索引吗?我不能保证每一行的唯一性,所以我避免使用UNIQUE索引.
任何指导/帮助将不胜感激.谢谢!
更新:这里是一个索引列表,我最初没有包括这个,因为我采取了猎枪的方法,并添加了大量的索引寻找一个有效的:
start_index: [start, first_user_id, second_user_id]
stop_index: [stop, first_user_id, second_user_id]
F1_index: [first_user_id]
F2_index: [second_user_id]
F3_index: [another_id]
test_1_index: [first_user_id,stop,start]
test_2_index: [first_user_id,start,stop]
test_3_index: [start,stop,first_user_id,second_user_id]
test_4_index: [stop,first_user_id,second_user_id,start]
test_5_index: [stop,start]
Run Code Online (Sandbox Code Playgroud)
这是EXPLAIN输出.
*************************** 1. row ***************************
id: 1 …Run Code Online (Sandbox Code Playgroud)