我需要在Rails 3.1 API中结合最新版本的设备使用基于令牌的身份验证.到目前为止没问题.
现在我不想将我的:auth_token附加到客户端的POST/PUT参数,而是将此令牌作为请求标头发送,如HTTP_X_MYAPP_AUTH_TOKEN".
我可以说服设计使用它而不是参数中的令牌吗?是否可以实现这两者,以便我的API用户可以通过请求头或POST/PUT参数发送令牌?
问候.费利克斯
我知道我可以通过-p选项在另一个端口上启动rails服务器.但是,只要我开始webrick,我想为每个应用程序设置另一个端口.
有任何想法吗?
问菲利克斯
最近我在Rails应用程序堆栈中添加了一个Varnish实例.可以通过使用Cache-Control Header缓存某个资源来确定其中的Varnish的默认配置,如下所示:
Cache-Control: max-age=86400, public=true
Run Code Online (Sandbox Code Playgroud)
我使用控制器中的expires_in语句实现了那个:
def index
expires_in 24.hours, public: true
respond_with 'some content'
end
Run Code Online (Sandbox Code Playgroud)
这很好用.我没想到的是,Cache-Control标头也会影响浏览器.这导致了 - Varnish和我的用户浏览器都缓存某个资源的问题.资源将从varnish中正确清除,但除非达到max-age,否则浏览器不会再次尝试请求它.
所以我想知道我应该将'expires_in'与Varnish结合使用吗?我可以在Varnish前面的Nginx或Apache实例中过滤Cache-Control标头,但这看起来很奇怪.
任何人都可以开导我吗?
问菲利克斯
我有一个脚本,我需要在git版本控制下提交项目后运行.因此,我在子目录/ hooks中的项目.git目录中创建了一个post-commit钩子,将其命名为'post-commit',并为其提供了以下内容:
#!/bin/sh
# I am a post-commit hook
/usr/local/bin/my_script &
Run Code Online (Sandbox Code Playgroud)
my_script是可执行的,在/ bin/sh中运行良好.实际上它有几秒钟的运行时间,所以我希望它是背景和从当前shell分离.这就是为什么我把尾随'&'放到我的钩子上.
现在的问题是,'&'似乎被忽略了.当我在OSX Lion下使用gitx 0.7.1时,gitx会在my_script需要运行的时间段内挂起.
我尝试了很多,但是没有让流程本身进入后台.
这有什么不对?
我想在瞬间做一些魔术,并将类方法添加到某个类中.因此我尝试了以下方法:
module Magic
def self.included(base)
base.extend ClassMethods
end
module ClassMethods
def method_added(name)
puts "class method '#{name}' added"
end
def some_class_method
puts "some class method"
end
end
end
class Foo
include Magic
def self.method_added(name)
puts "instance method #{name} added"
end
end
Run Code Online (Sandbox Code Playgroud)
这种方法适用于实例方法,类方法失败.我怎么解决这个问题?有什么建议?
在我的基于Backbone.js的应用程序中,我正在与我的API进行通信,如果没有或使用无效的身份验证令牌,则使用401进行响应.每次收到401时,我都想通过导航到#login页面进行检测.
为了获取401,我成功地包装了Backbone.sync,但是在那一点上我被卡住了.我在这里尝试了几种策略:
throw 'unauthorized'在Backbone :: sync中尝试在我的路由器中获取.失败:'未捕获未授权'
尝试#.navigate '#login'关闭Backbone :: sync这不仅看起来很奇怪,而且还有我的应用程序基于AMD/require.js的问题,我不能简单地在我的包装sync函数中访问我的Backbone.Router实例.
到目前为止,我看到的唯一解决方案是创建一个"全局可用"的缓存对象,该对象获取对我的路由器实例的引用,然后将其define作为需要的依赖项.那个缓存对象必须是一个单独的东西,并打破了我的整个'请求 - 没有全局和没有命名空间' - 策略.
我有点被困在这里.任何人都能指出我对这个常见问题更清晰的解决方案吗?
我现在和自耕农打了一段时间.我想知道如何完成自举Backbone应用程序的启动并同时启用require.js.
yeoman init
Run Code Online (Sandbox Code Playgroud)
为我提供了一个可以使用AMD风格模块的设置.
yeoman init backbone:all
Run Code Online (Sandbox Code Playgroud)
为我提供了一个Backbone脚手架,但我必须在index.html中手动"包含"我的所有模型,集合等.
有两种方法可以同时拥有吗?
问菲利克斯
我正在构建一个基于Backbone.js的应用程序并面临一个奇怪的问题.
在某个时刻,应用程序请求收集资源,在Chrome(和Safari)内部,我收到如下错误:
XMLHttpRequest cannot load http://api.mydomain.net/v1/foos/00000d/bars/000014/boots Origin http://localhost:3501 is not allowed by Access-Control-Allow-Origin.
Run Code Online (Sandbox Code Playgroud)
好吧,我认为CORS问题并归咎于我的API.然后通过CURL请求这个资源:
curl -i -H'Accept: application/json' -H'X-Auth-Token: pAWp5hrCmXA83GgFzgHC' -XOPTIONS 'http://api.mydomain.net/v1/foos/00000d/bars/000014/boots'
HTTP/1.1 200 OK
Status: 200
Access-Control-Allow-Origin: *
Access-Control-Allow-Methods: POST, GET, OPTIONS
Access-Control-Allow-Headers: DNT,X-Mx-ReqToken,Keep-Alive,User-Agent,X-Requested-With,If-Modified-Since,Cache-Control,Content-Type,X-Auth-Token
Content-Length: 0
Run Code Online (Sandbox Code Playgroud)
看起来不错,现在是GET:
curl -i -H'Accept: application/json' -H'X-Auth-Token: pAWp5hrCmXA83GgFzgHC' -XGET 'http://api.mydomain.net/v1/foos/00000d/bars/000014/boots'
HTTP/1.1 204 No Content
Status: 204
Cache-Control: no-cache
Content-Length: 0
Content-Type: text/plain
Run Code Online (Sandbox Code Playgroud)
如果我请求包含至少一个对象的靴子集合,一切正常.我认为,我的服务器响应arr完全正常的CORS标头.那么为什么浏览器报告跨源资源问题呢?
是由于text/plain我的204回复的内容类型?
在我的基于Backbone.js的应用程序中,我正在与我的API进行通信,它响应204状态和空体,以防请求集合但不包含任何数据.在我看来,RESTful API在这种情况下应该如何响应.
在我的应用程序现在我遇到了问题,显然在收到204响应后没有触发任何事件.我试图绑定reset并all喜欢:
FoosCollectionView.prototype.initialize = function() {
this.collection = new FoosCollection;
this.collection.bind('reset', this.render, this);
this.collection.bind('all', this.render, this);
return this.collection.fetch();
};
Run Code Online (Sandbox Code Playgroud)
但事件永远不会发生.所以我试着给fetch一些回调:
FoosCollectionView.prototype.initialize = function() {
this.collection = new FoosCollection();
return this.collection.fetch({
success: function(a, b, c) {
debugger;
},
error: function(a, b, c) {
debugger;
},
complete: function(a, b) {
debugger;
}
});
};
Run Code Online (Sandbox Code Playgroud)
相同的行为.如果响应是204,则不会达到调试语句.如何处理204响应呢?我是否需要深入挖掘sync并为204添加额外处理,或者Backbone中有什么东西我还不知道?
Thx Felix
鉴于我有用户输入反应的AJAX基于搜索字段,请求搜索结果从通过AJAX后端,示出了在下面的搜索字段下拉的结果,允许导航通过经由光标键搜索结果和反作用于esc在按键聪明的方式.
由于当前基于Backbone的组件在很多方面被打破,我想重新实现该搜索组件使用React和可能的Flux架构.
在规划期间,结果表明,我的组件至少有10个不同的状态(可能更多),它必须对actions用户输入触发做出反应,并且还要actions由异步服务器响应触发.
问题1:我应该在a store而不是父组件中建模所有状态吗?这意味着,每个用户输入都会更改存储状态,例如:searchQuery,:searchResults并且我的父视图组件会对该状态的更改做出反应?
问题2:或者我应该在父组件本身中建模所有状态并省略a store,dispatcher并且actions完全?
问题3:store事实证明,独立于处理父组件本身或其中的状态,组件本身可以具有至少10种不同的状态,并且应该只允许一定数量的转换.通常,我会在这里引入一个statemachine实现,在每次接收到一个动作时都会建模:states并允许:transitions和执行转换,store或者在父组件中调用一个回调方法.什么是正确的React way处理states和transitions它们之间states的一个组成部分?
问题4:FluxJavascript 的最新实现是哪种?到目前为止,我已经看到了反流,但我不确定,这是我的毒药.
我愿意接受各种建议.