我的API允许用户购买某些独特的商品,其中每件商品只能出售给一个用户.因此,当多个用户尝试购买相同的项目时,一个用户应该得到响应:好的,另一个用户应该得到响应too_late.
现在,我的代码中似乎存在错误.竞争条件.如果两个用户试图在同一时间购买相同的项目,他们都得到了答案确定.这个问题在生产中显然是可重复的.现在我写了一个简单的测试,试图通过rspec重现它:
context "when I try to provoke a race condition" do
# ...
before do
@concurrent_requests = 2.times.map do
Thread.new do
Thread.current[:answer] = post "/api/v1/item/buy.json", :id => item.id
end
end
@answers = @concurrent_requests.map do |th|
th.join
th[:answer].body
end
end
it "should only sell the item to one user" do
@answers.sort.should == ["ok", "too_late"].sort
end
end
Run Code Online (Sandbox Code Playgroud)
好像不会同时执行查询.为了测试这个,我将以下代码放入我的控制器操作中:
puts "Is it concurrent?"
sleep 0.2
puts "Oh Noez."
Run Code Online (Sandbox Code Playgroud)
如果请求是并发的,则预期输出将是:
Is it concurrent?
Is it concurrent?
Oh …Run Code Online (Sandbox Code Playgroud) 有时我觉得有必要在我的git提交消息中加入一些表达性.不幸的是,bash似乎并不喜欢这样.
iblue@silence ~/git/wargames $ git commit -m "Frustrating <insert object of frustration here>!"
-bash: !": event not found
Run Code Online (Sandbox Code Playgroud)
使用反斜杠转义有帮助,但这包括提交消息中的反斜杠.
如何正确地逃避bash中的感叹号?
如何使用Java中的API从地理坐标(纬度,经度)中获取地址或位置名称?Java中是否有可用的反向地理编码器?
我们有一个主人和一个生产部门.主分支包含当前的开发,而生产分支包含服务器上运行的东西.有时,有一个重要的错误修复必须应用于两个分支.
目前,我们只是在主分支上创建它之后挑选提交.但是,当我们合并分支时,这有时会产生合并冲突.还有替代品吗?
有时我看到代码使用to_d.ruby文档甚至指出有一种Float#to_d方法.但是,它不在我的ruby(ruby 1.9.3p263 (2012-08-23 revision 36792)版本中.
1.9.3p263 :001 > "0.0".to_d
NoMethodError: undefined method `to_d' for "0.0":String
from (irb):1
from /home/iblue/.rvm/rubies/ruby-1.9.3-head/bin/irb:16:in `<main>'
1.9.3p263 :002 > 0.0.to_d
NoMethodError: undefined method `to_d' for 0.0:Float
from (irb):2
from /home/iblue/.rvm/rubies/ruby-1.9.3-head/bin/irb:16:in `<main>'
1.9.3p263 :003 > 0.to_d
NoMethodError: undefined method `to_d' for 0:Fixnum
from (irb):3
from /home/iblue/.rvm/rubies/ruby-1.9.3-head/bin/irb:16:in `<main>'
Run Code Online (Sandbox Code Playgroud)
没有to_d中Float,String或Fixnum.这是怎么回事?
在将测试数据播种到DB表之前,我需要截断表(我需要重置主键),我试着这样做:
ActiveRecord::Base.connection.execute("TRUNCATE users")
Run Code Online (Sandbox Code Playgroud)
但是当我从DB打印出数据时,我仍然没有看到从1计数主键.
我究竟做错了什么?
编辑:
另外,我已经尝试在终端中手动运行PostgreSQL数据库
truncate users
Run Code Online (Sandbox Code Playgroud)
但主要数量仍然不是从1开始.
解:
在Postgres中,运行:
ALTER SEQUENCE users_id_seq RESTART WITH 1;
Run Code Online (Sandbox Code Playgroud) 最近我想过滤掉MongoDB中包含某个关键字数组的记录,例如:我有五个包含关键字数组的记录:
{a:[1,2]}
{a:[1,3,8]}
{a:[1,2,5]}
{a:[3,5,1]}
{a:[4,5]}
Run Code Online (Sandbox Code Playgroud)
如果我输入数组[1,2,3,5]进行搜索,那么我想得到:
{a:[1,2]}
{a:[1,2,5]}
{a:[3,5,1]}
Run Code Online (Sandbox Code Playgroud)
它们中的每一个都是子数组[1,2,3,5].
任何的想法?
请不要使用where子句(如果可能的话).谢谢!
我正在尝试创建一个包装d3.js的gem,Source可以在https://github.com/iblue/d3-rails找到
所以当我在我的Gemfile中包含这个gem时
gem "d3-rails", :git => "git://github.com/iblue/d3-rails.git"
Run Code Online (Sandbox Code Playgroud)
当我在我的application.js中包含javascript时:
//=require d3
Run Code Online (Sandbox Code Playgroud)
然后我的资产编译失败,我编译的application.js只包含
throw Error("Encoding::CompatibilityError: incompatible character encodings: UTF-8 and ASCII-8BIT")
Run Code Online (Sandbox Code Playgroud)
我正在使用Rails 3.1.3和ruby-1.9.3-p125.jQuery使用完全相同的gem结构,它的工作原理.我究竟做错了什么?
编辑:
我也看到了这个问题:Ruby 1.9抛出javascript编码错误.这不适用于此,我的文件是有效的UTF-8:
ruby-1.9.3-p125 :001 > d = File.read("./d3.js")
=> [...]
ruby-1.9.3-p125 :002 > d.encoding
=> #<Encoding:UTF-8>
ruby-1.9.3-p125 :003 > d.valid_encoding?
=> true
Run Code Online (Sandbox Code Playgroud)
编辑2:
我也尝试在我的插页中插入一些伏都教config/environment.rb.这是行不通的:
# -*- encoding : utf-8 -*-
# Load the rails application
require File.expand_path('../application', __FILE__)
# --------- VOODOO BEGINS HERE -----------------
Encoding.default_external = Encoding::UTF_8
Encoding.default_internal = Encoding::UTF_8 …Run Code Online (Sandbox Code Playgroud) javascript rubygems ruby-on-rails ruby-on-rails-3.1 asset-pipeline
显然#filter_chain已被弃用,有谁知道如何?我尝试了几件事,但实际上找不到任何有用的东西.
我试图通过在numpy中使用矢量化形式来使一些代码更有效.让我举个例子让你知道我的意思.
给出以下代码:
a = np.zeros([4,4])
a[0] = [1., 2., 3., 4.]
for i in range(len(a)-1):
a[i+1] = 2*a[i]
print a
Run Code Online (Sandbox Code Playgroud)
它输出
[[ 1. 2. 3. 4.]
[ 2. 4. 6. 8.]
[ 4. 8. 12. 16.]
[ 8. 16. 24. 32.]]
Run Code Online (Sandbox Code Playgroud)
当我现在尝试像这样向量化代码:
a = np.zeros([4,4])
a[0] = [1., 2., 3., 4.]
a[1:] = 2*a[0:-1]
print a
Run Code Online (Sandbox Code Playgroud)
我只是让第一次迭代正确:
[[ 1. 2. 3. 4.]
[ 2. 4. 6. 8.]
[ 0. 0. 0. 0.]
[ 0. 0. 0. 0.]]
Run Code Online (Sandbox Code Playgroud)
是否有可能以矢量化形式有效地编写上面的代码(下一次迭代总是访问上一次迭代)或者我是否必须保持for循环?
bash ×1
capybara ×1
filter ×1
geolocation ×1
git ×1
java ×1
javascript ×1
mongodb ×1
numpy ×1
postgresql ×1
python ×1
rspec ×1
ruby ×1
rubygems ×1
sql ×1