小编ibl*_*lue的帖子

多线程并发Capybara请求?

我的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)

rspec ruby-on-rails capybara

10
推荐指数
2
解决办法
3736
查看次数

如何在bash中逃避感叹号?

有时我觉得有必要在我的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中的感叹号?

bash

9
推荐指数
4
解决办法
6391
查看次数

如何将纬度和经度转换为位置名称

如何使用Java中的API从地理坐标(纬度,经度)中获取地址或位置名称?Java中是否有可用的反向地理编码器?

java geolocation reverse-geocoding

8
推荐指数
0
解决办法
4458
查看次数

樱桃采摘的替代品

我们有一个主人和一个生产部门.主分支包含当前的开发,而生产分支包含服务器上运行的东西.有时,有一个重要的错误修复必须应用于两个分支.

目前,我们只是在主分支上创建它之后挑选提交.但是,当我们合并分支时,这有时会产生合并冲突.还有替代品吗?

git

8
推荐指数
1
解决办法
2745
查看次数

Float#to_d在哪里?

有时我看到代码使用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_dFloat,StringFixnum.这是怎么回事?

ruby

8
推荐指数
1
解决办法
2033
查看次数

Rails种子:如何截断DB表?

在将测试数据播种到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)

sql postgresql ruby-on-rails

8
推荐指数
3
解决办法
5923
查看次数

Mongodb - 如何查找包含某些关键字数组的记录

最近我想过滤掉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子句(如果可能的话).谢谢!

mongodb

7
推荐指数
1
解决办法
2678
查看次数

资产管道编码问题(UTF-8与ASCII-8BIT)与外部gem

我正在尝试创建一个包装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

7
推荐指数
1
解决办法
2287
查看次数

如何检查导轨中的过滤链(3.0.8)

显然#filter_chain已被弃用,有谁知道如何?我尝试了几件事,但实际上找不到任何有用的东西.

ruby-on-rails before-filter filter

7
推荐指数
1
解决办法
1325
查看次数

尝试使用numpy对迭代计算进行矢量化

我试图通过在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循环?

python numpy

7
推荐指数
2
解决办法
965
查看次数