小编Tho*_*son的帖子

自定义Authorization HTTP标头

我需要在向API发送请求时对客户端进行身份验证.客户端有一个API令牌,我正在考虑使用标准Authorization头将令牌发送到服务器.

通常,此标头用于BasicDigest身份验证.但我不知道是否允许自定义此标头的值并使用自定义身份验证方案,例如:

Authorization: Token 1af538baa9045a84c0e889f672baf83ff24
Run Code Online (Sandbox Code Playgroud)

你会推荐这个吗?或者是否有更好的方法来发送令牌?

api rest authorization http http-headers

80
推荐指数
3
解决办法
10万
查看次数

我可以将HTML5中的Microdata添加到XHTML Strict站点并且仍然符合要求吗?

我有一个用XHTML 1.0 Strict编码的站点.我想使用新的Microdata为我的网站添加面包屑(因此Google会理解它们).

我的旧的非微数据标记面包屑看起来像这样:

<ul>
  <li><a href="...">Level 1</a></li>
  <li><a href="...">Level 2</a></li>
  <li><a href="...">Level 3</a></li>
</ul>
Run Code Online (Sandbox Code Playgroud)

据谷歌称,要使用Microdata标记面包屑,你可以像这样扩展上面的代码:

<ul>
  <li itemscope itemtype="http://data-vocabulary.org/Breadcrumb">
    <a href="..." itemprop="url">
      <span itemprop="title">Level 1</span>
    </a>
  </li>
  ...
</ul>
Run Code Online (Sandbox Code Playgroud)

但这不是有效的XHTML 1.0 Strict.

我该怎么办?
我应该忽略验证冲突吗?
我应该写itemscope="itemscope"而不是只是itemscope(这将是有效的XML,但仍然无效的XHTML)?
我应该将Doctype更改为HTML5而不是XHTML 1.0 Strict吗?

我想让它一直回到IE6!

请指教 :)

validation html5 xhtml-1.0-strict breadcrumbs microdata

25
推荐指数
2
解决办法
1万
查看次数

Git完成在OS X Yosemite和Homebrew上的zsh中不起作用

我无法让git完成在zsh shell中新安装的OS X Yosemite上工作.我已经使用自制软件安装了git和zsh:

brew install zsh git
Run Code Online (Sandbox Code Playgroud)

当通过自制软件安装git时,它应该为你设置tab-completion,但是当我git <tab>,它只是尝试tab-complete目录,而不是git-commands.即它没有给出任何错误 - 它只是没有工作 - 就像它没有设置.

这是我目前所知道的

显然,zsh会通过查找_*其中一个目录中的文件来寻找自动完成的方法$fpath.这是我的:

% echo $fpath
/usr/local/share/zsh/site-functions /usr/local/Cellar/zsh/5.0.6/share/zsh/functions
Run Code Online (Sandbox Code Playgroud)

看看我们看到的第一条路径:

% ls -l /usr/local/share/zsh/site-functions
lrwxr-xr-x  1 watson  admin   55 Oct 20 12:08 _git -> ../../../Cellar/git/2.1.2/share/zsh/site-functions/_git
lrwxr-xr-x  1 watson  admin   70 Oct 20 12:08 git-completion.bash -> ../../../Cellar/git/2.1.2/share/zsh/site-functions/git-completion.bash
Run Code Online (Sandbox Code Playgroud)

所以似乎设置开箱即用 - 但事实并非如此.

这也是我也尝试过的

混帐completion.bash

  1. 正在下载git-completion.bash
  2. 使用它运行它 source git-completion.bash

这种工作(即它启用自动完成),但它会打印一个警告:

WARNING: this script is deprecated, please see git-completion.zsh
Run Code Online (Sandbox Code Playgroud)

混帐completion.zsh

因此,由于上述警告,我显然也尝试下载git-completion.zsh并按照文件顶部的指南进行操作,但它基本上会告诉您首先获取.bash文件,这是导致错误的原因.

搜索StackOverflow和Google

我在这里和谷歌上搜索了我能找到的所有东西,但似乎没有什么对我有用.

git homebrew zsh

24
推荐指数
2
解决办法
8396
查看次数

如何限制Rails路由文件中的资源格式

在Rails中路由资源时,可选的format属性会自动附加到生成的路由中.这样可以将所讨论的资源请求为XML,HTML等.实际允许的格式通常在控制器中使用respond_to.

但在许多情况下,您只想支持HTML,并且respond_to :html在每个控制器中的每个操作中写入感觉都是一种开销.因此,如果在routes.rb文件中构建路由时已经有限制允许内容类型的方法,那将是很酷的,例如

map.resources :users, :formats => :html
map.resources :users, :formats => [:html, :xml]
map.resources :users, :formats => {:index => :html, :show => [:html, :xml]}
Run Code Online (Sandbox Code Playgroud)

有没有办法实现本机或通过插件?

PS解决此问题的常用方法是忽略该问题,不要respond_to在操作中使用.但这实际上并不限制允许的内容类型.相反,它只是期望视图目录中存在每种可能的内容类型的模板.如果在请求时不存在,则系统将抛出HTTP 500错误.

rest routing content-type ruby-on-rails

13
推荐指数
3
解决办法
7438
查看次数

为什么使用连接时ARel范围变为只读?

如果您joins在ARel范围内使用,则结果将变为只读(即您无法更新您获得的任何记录).如果您不希望结果是只读的,那么您只需链接readonly(false)到范围,例如

User.joins(:orders).where(:orders => { :state => 'completed' }).readonly(false)

但我猜测默认的连接范围是只读的有一个原因.将结果设置为只读的原因是什么?

activerecord arel

11
推荐指数
1
解决办法
1546
查看次数

如何解释MongoDB返回的lastErrorObject属性?

MongoDB有时会返回lastErrorObject- 而且据我所知,这是它的架构:

{
  updatedExisting: <boolean>,
  upserted: <boolean>,
  n: <num>,
  connectionId: <num>,
  err: <string>,
  ok: <num>
}
Run Code Online (Sandbox Code Playgroud)

但是mongodb.org网站上我唯一可以找到对该对象的引用的地方就在findAndModify API文档中.

但我无处可寻找对象的不同属性的任何解释.我可以做出有根据的猜测,但即使我从文档中得到的结论也似乎与它自相矛盾.例如upserted,根据findAndModify应该是一个布尔值,但显然也可以是一个ObjectId.

什么是ok?它似乎1大部分时间 - 但它不是布尔值,所以它可以是2什么,这是什么意思?

尽管某些属性可能非常明显,但请在答案中为每个属性写一个解释,以便每个人都有100%的文档记录.或者,如果我错过了它(它发生),请随时链接到解释这个的文档;)

mongodb

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

验证相关对象的最大数量

我有一个帐户模型和一个用户模型:

class Account < ActiveRecord::Base
  has_many :users
end

class User < ActiveRecord::Base
  belongs_to :account
end
Run Code Online (Sandbox Code Playgroud)

用户属于某个帐户,并且帐户具有用户最大值(每个帐户不同).但是,如何在向帐户添加新用户时验证是否未达到此最大值?

首先,我尝试在用户上添加验证:

class User < ActiveRecord::Base
  belongs_to :account
  validate :validate_max_users_have_not_been_reached

  def validate_max_users_have_not_been_reached
    return unless account_id_changed? # nothing to validate
    errors.add_to_base("can not be added to this account since its user maximum have been reached") unless account.users.count < account.maximum_amount_of_users
  end
end
Run Code Online (Sandbox Code Playgroud)

但这只有在我一次添加一个用户时才有效.

如果我通过@account.update_attributes(:users_attributes => ...)它添加多个用户,即使只有一个用户的空间,也可以直接通过.

更新:

只是为了澄清:当前验证方法验证account.users.count小于account.maximum_amount_of_users.例如,比如说account.users.count是9并且account.maximum_amount_of_users是10,那么验证将通过,因为9 <10.

问题是,在account.users.count所有用户都写入数据库之前,返回的计数不会增加.这意味着同时添加多个用户将通过验证,因为用户计数将一直相同,直到它们全部经过验证.

正如askegg指出的那样,我是否应该在帐户模型中添加验证?那怎么办呢?

validation activerecord ruby-on-rails

6
推荐指数
1
解决办法
4771
查看次数

如何将GraphicsMagick与应用程序捆绑在一起?

我想将一个独立版本的GraphicsMagick gm二进制文件与一个应用程序捆绑在一起,这样我就不必在运行应用程序的服务器上构建和安装GraphicsMagick库.

细节

我正在创建一个构建系统,它可以生成一个包含整个node.js应用程序的tar-ball,包括所有二进制依赖项(在我们的例子中是node二进制文件和GraphicsMagick库).然后它将其上传到服务器,提取并运行它.

我试图用预先编译的gm二进制文件发送它,但正如预期的那样gm取决于几个库,所以我得到的错误就像gm: error while loading shared libraries: libGraphicsMagick.so.3: cannot open shared object file: No such file or directory.

我在本地运行OSX,我们的服务器运行Ubuntu.

deployment ubuntu build web-deployment graphicsmagick

5
推荐指数
1
解决办法
1320
查看次数

Nodejs EventEmitter.once()如何工作?

从nodejs 源代码(LOC 179),我们有以下内容:

EventEmitter.prototype.once = function(type, listener) {

  /** ... **/

  function g() { /** ... **/ }

  g.listener = listener; // => ???
  this.on(type, g);

  return this;
};
Run Code Online (Sandbox Code Playgroud)

到目前为止,我的想法是这样的:

EventEmitter.once()设置一个事件typelistener在通过调用回调后立即将其删除g().但这条生产线究竟做了g.listener = listener;什么呢?

它是否在调用时添加了一个属性listener,该属性是构造函数创建的函数对象的函数g()

javascript node.js

5
推荐指数
1
解决办法
2329
查看次数

划分两个浮点数的安全方法?

划分两个IEEE 754浮点数的最安全的方法是什么?

就我而言,语言是JavaScript,但我想这并不重要.目标是避免正常的浮点陷阱.

我已经读过,人们可以使用"修正系数"(cf)(例如10提升到某个数字,例如10 ^ 10),如下所示:

(a * cf) / (b * cf)
Run Code Online (Sandbox Code Playgroud)

但我不确定这会对分裂产生影响吗?

顺便说一下,我已经看过Stack Overflow上的其他浮点帖子了,我还没有找到关于如何划分两个浮点数的单一帖子.如果答案是在添加和分割时解决浮点问题的解决方案之间没有区别,那么请回答一下.

编辑:

我在评论中已经被问到我所指的哪些陷阱,所以我想我也会在这里为那些没有阅读评论的人添加快速说明:

当加0.1和0.2时,你会得到0.3,但是使用浮点运算得到0.30000000000000004(至少在JavaScript中).这只是常见陷阱的一个例子.

上面的问题在Stack Overflow上讨论了很多次,但我不知道分割时会发生什么,如果它与添加或乘法时发现的陷阱不同.可能没有风险,在这种情况下,这将是一个非常好的答案.

javascript math floating-point ieee-754 node.js

0
推荐指数
2
解决办法
903
查看次数