我正在尝试构建一个部署在heroku上的非常简单的sinatra应用程序.
我们的应用程序没有将内容输出到Web浏览器,它通过API与另一台计算机进行通信.所以我通常的技巧就是在我使用应用程序时只是向浏览器打印一些额外的调试信息.
我在相关应用程序中看到的示例代码显示了多个'puts'或'p'语句,用于查看发生了什么...
输出在哪里,我可以在程序执行时看到输出,或之后.
一般来说,如果你在Heroku上托管的代码徘徊,那就是没有做你想要的,那么在代码输出消息中的各个地方最简单的方法就是"foo equals 123",这样你就可以看到输出到弄清楚代码中发生了什么?
p和put不输出所以当我输入"heroku logs"时我可以看到的日志...
我很确定ruby有一个习惯用法.
我说我的代码中有太多的地方
if (x == A) || (x == B) || (x ==C)
do_something
else
do_something_else
end
Run Code Online (Sandbox Code Playgroud)
我知道我也能这样做
case x
when A, B, C
do_something
else
do_something_else
end
Run Code Online (Sandbox Code Playgroud)
但我更喜欢使用,if else如果有一个很好的成语,使它更简洁.
我需要根据我的另一个项目的一小部分开始一个新项目,我的回购是在github.
我在一个新的项目文件夹中做了一个git clone ...很好.
我删除了我不需要的一切,摆脱了旧的迁移等......好吧.
现在它在本地运行正常,但"git log"显示所有旧提交.
我想告诉git"忘记所有先前的提交,这是一个新项目,所以在此之前忘记一切,从现在开始作为第一次提交"
我读到了关于git rebase但是不清楚这是否是正确的命令,如果是这样,如何将它用于这个非常简单的目的.
我们需要为一些新添加的表添加更多的种子数据到我们的rails项目的"100版".
但是,如果我们只是将它添加到seeds.rb并重新运行rake db:seed命令,它当然会重新添加原始种子数据,复制它.
因此,如果您已经将种子数据添加到seeds.rb中,例如,TableOne ...我们如何在开发的后期阶段逐步添加TableTwo和TableThree的种子数据?
我希望我可以简单地创建一个新的seeds_two.rb文件并运行,rake db:seeds_two但这给了一个错误Don't know how to build task 'db:seeds_two'
所以它看起来只能使用"seeds.rb" - 那么人们如何保持种子数据的增量添加?
在我的rspec集成测试中,当我有一个断言如:
assert page.has_content? some_value
Run Code Online (Sandbox Code Playgroud)
如果断言失败,则显示:
MiniTest::Assertion:
Failed assertion, no message given
Run Code Online (Sandbox Code Playgroud)
最小的文档说"所有断言方法接受一个msg,如果断言失败则打印出来",但是我找不到任何如何指定消息的例子.这些不是有效的语法:
assert("custom fail msg") page.has_content? some_value
assert page.has_content? some_value, "custom fail msg"
Run Code Online (Sandbox Code Playgroud) 给定一个ZipCodeInfos表,包含字段zipcode,state,city(所有字符串),其中zipcode是唯一的:
zipcode,city,state
"10000", "Fooville", "AA"
"10001", "Smallville", "AA"
"10002", "Whoville", "BB"
Run Code Online (Sandbox Code Playgroud)
生成整个表的哈希对象的最快方法是什么,其中zipcode是这样的键:
{ "10000" => {:city => "Fooville", :state => "AA" },
"10001" => {:city => "Smallville", :state => "AA" },
"10002" => {:city => "Whoville", :state => "BB" } }
Run Code Online (Sandbox Code Playgroud)
我知道对于给定的记录,我可以使用.attributes生成一个带有键,值对的字段名,字段值的哈希,例如Zipcode.first.attributes给我
{"id" => 1, "zipcode" => "10000", "city" => "Fooville", "state => "AA" }
Run Code Online (Sandbox Code Playgroud)
但是,如果没有蛮力迭代每条记录(通过.map),我就无法弄清楚如何使用zipcode创建所需的哈希值作为哈希每个节点的关键.
这是我能想到的最好的,我怀疑有一些漂亮的Ruby优点更快?
zip_info_hash = {}
ZipCodeInfo.all.map{|x| zip_info_hash[x.zip] =
{'state' => x.state, 'city' => x.city }}
Run Code Online (Sandbox Code Playgroud) 在我的应用程序中,我需要能够找到所有数字子串,然后扫描每个子串,找到匹配范围的第一个(例如5到15之间)并用另一个字符串"X"替换THAT实例.
我的测试字符串 s = "1 foo 100 bar 10 gee 1"
我的初始模式是任何一个或多个数字的字符串,例如, re = Regexp.new(/\d+/)
matches = s.scan(re) 给 ["1", "100", "10", "1"]
如果我想替换第N场比赛,只有第N场比赛,用"X"我该怎么办?
例如,如果我想要替换第三个匹配"10"(匹配[2])我不能只说
s[matches[2]] = "X"因为这样做有两个替换
"1 foo X0 bar X gee 1"
任何帮助,将不胜感激!
如果我们必须在同一规范上下文中进行多次获取,控制器规范中是否有任何方法可以在每次获取之前“重置”实例变量空间?
我理解每次测试一个断言的指南。但是,对于我们的一组测试,如果我们在每次获取之前不进行单独的(冗长的)before(:each) 设置,并且如果我们在单个上下文中一起运行一系列获取/断言,它的运行速度将提高大约 3 倍.
但是,似乎(与通过浏览器调用控制器方法时不同)如果您使用 rspec 执行两个连续的 get,则每次 get 都不会清除实例变量,因此数据交叉是可能的。
这是一个失败的测试,表明当另一个控制器方法“vartest2”运行时,“vartest1”中设置的变量仍然存在:
控制器方法:
def vartest1
@this_var = "foo"
render :text => @this_var
end
def vartest2
render :text => @this_var # should be EMPTY!
end
Run Code Online (Sandbox Code Playgroud)
Rspec 控制器规格:
describe "instance variable crossover example", :focus => true do
describe "THIS PASSES put each get in separate contexts" do
it "vartest1 outputs foo" do
get "vartest1"
response.body.should include("foo")
end
it "vartest2 does NOT output foo" do
get "vartest2"
response.body.should_not include("foo")
end
end
describe "THIS …Run Code Online (Sandbox Code Playgroud) 我的rails应用程序跟踪任何delayed_job错误,我们今天第一次看到这个错误:
deadlock; recursive locking /app/vendor/bundle/ruby/1.9.1/gems/delayed_job-3.0.5/lib/delayed/worker.r
Run Code Online (Sandbox Code Playgroud)
该应用程序一直表现完美,有数百万个延迟工作处理没有错误.
这只是"随机事物之一"还是我们可以/应该采取哪些措施来防止它再次发生?
我特别困惑,因为我们只运行一名工人.
我们的设置:Rails 3.2.12,Heroku app,Postgres,几个网络dynos但只有1个工作dyno.
在运行 Unicorn worker 的 Heroku Rails 4.2 Web 应用程序中,每个 worker 需要大约 230MB,我们可以为每个“1X”Heroku dyno 运行 2 个,或者每个“2X”Heroku dyno 运行 4 个。CPU要求相当低。
如果我们需要 8 个工人来处理我们的流量,那么使用四个“1X”dynos 与两个“2X”dynos 来获得 8 个工人的技术/性能权衡是什么?
(两年前,Heroku 路由到 dynos 的方式存在一个广为人知的问题,我记得这表明具有更多工人的更大的 dynos 效果最好,因为请求被路由到“繁忙”dyno 的可能性较小。但我没有找到关于何时最好使用更大的 dynos 和更多的 dynos 的任何当前指南。)