标签: rack

以编程方式设置Rack会话cookie到期

我正在使用Rack尝试在我的Sinatra应用程序中实现"记住我"功能.

我能够将会话cookie设置为在会话结束时或在X秒时间内到期,但我想同时执行这两项操作.

例如,如果用户点击了"记住我",那么我希望他们的会话在X秒后结束.例如,我的app.rb有一行如下所示:

use Rack::Session::Cookie, :expire_after => 2592000, #30 days in seconds
                           :secret => MY_SECRET
Run Code Online (Sandbox Code Playgroud)

当用户登录时,我尝试执行以下操作:

if (!remember_me)
  env['rack.session.options'][:expire_after] = nil
end
Run Code Online (Sandbox Code Playgroud)

但是,这不会设置cookie值.

怎么设置这个?

ruby session rack sinatra

14
推荐指数
1
解决办法
4990
查看次数

Rails 3.1强制常规HTTP

以前,我一直在使用ssl_requirement来对我们通过ssl提供服务的页面进行细粒度控制,并通过纯http提供服务.

根据ssl_requirement自己的wiki,它已被rails 3.1的Force SSL 取代.然而,情况似乎并非如此.强制SSL似乎没有暴露出相反方向的选项,没有办法强制页面通过常规http发送.

什么是正确的Rails 3.1方式强制页面以纯http显示?Force SSL真的取代了ssl_requirement吗?

ssl rack ruby-on-rails

14
推荐指数
2
解决办法
5225
查看次数

Rails如何在公共场合提供静态内容?

公共服务中提供静态内容的红宝石代码有多少?它完全通过rails应用程序吗?它是否使用Rack :: Static

rack ruby-on-rails

14
推荐指数
2
解决办法
7107
查看次数

rack-mini-profiler正在显示分析静态文件

我看着它的railscast(http://railscasts.com/episodes/368-miniprofiler)之后我正在使用rack-mini-profiler .

我把它添加到我的Gemfile中:

gem 'rack-mini-profiler'
Run Code Online (Sandbox Code Playgroud)

使用bundler安装它并使用"rails s"启动我的开发环境.profilling工作,它显示在网页的左上角,但它恰好分析所有静态文件(js,css,图像等).它似乎也有10行限制,因此隐藏了实际请求.

在此输入图像描述

在此输入图像描述

是否可以配置它以避免分析静态文件?

ruby profiling rack ruby-on-rails rack-mini-profiler

14
推荐指数
1
解决办法
1721
查看次数

在`Rack :: Session :: Cookie`上使用`Rack :: Session :: Pool`

Rack :: Session :: PoolRack :: Session :: Cookie的不同用例有哪些?

据我所知(如果我错了,请纠正我):

  • Cookie所有会话密钥:值对直接存储在cookie中(编组)
  • Pool 只在cookie中存储一个id,并在其中维护会话哈希的其余部分 @pool

那么:选择一个而不是另一个的含义/原因是什么?什么@pool?为什么Pool需要公开不同的公共接口Cookie?为什么文档如此缺乏?

ruby cookies session rack pool

14
推荐指数
1
解决办法
2074
查看次数

使用Cookies与Rack :: Test

我正在尝试使用Rack :: Test为我的Sinatra应用程序编写RSpec测试.我无法理解如何使用cookies.例如,如果我的应用程序设置了cookie(不是通过:session),我该如何检查该cookie是否正确设置?

另外,如何使用该cookie发送请求?

ruby cookies rack rspec sinatra

13
推荐指数
1
解决办法
6366
查看次数

如何在Rack中间件中使用cookie?

我正在使用Ruby on Rails 3,我想cookies.signed在Rack中间件中使用该方法.我需要这个,因为我想直接在中间件中验证用户,而不是before_filterapplication_controller.rb文件中使用.

例如,如果我以这种方式在控制器中使用该方法:

cookies.signed[:user_id']
Run Code Online (Sandbox Code Playgroud)

我明白了

--- 
- 1 # This is the id of the current signed in user
- a64ee3asdtjhcc7b35fcb280956be00ba27f94d48dfe4291c06db7d57577d5893 # This is the cookie salt
Run Code Online (Sandbox Code Playgroud)

但如果我在这个方式的Rack中间件(同一个应用程序)中使用它:

request = Rack::Request.new(env)
request.cookies.signed[:user_id']
Run Code Online (Sandbox Code Playgroud)

我明白了

NoMethodError
undefined method `signed' for #<Hash:0x00000103333d40>
Run Code Online (Sandbox Code Playgroud)

那么,我怎样才能在中间件中使用该方法呢?如何获取用户ID以便我可以对其进行身份验证?


也许我必须包含\ extend,例如,ActionDispatch ...如果是这样,怎么样?

ruby cookies rack ruby-on-rails ruby-on-rails-3

13
推荐指数
2
解决办法
6997
查看次数

如何在不同版本的gem之间切换?

我在本地机器上安装了三个版本的机架(rack (1.4.1, 1.3.6, 1.3.5)).对于某些宝石(例如Cucumber),它需要更低版本的rack激活?

我试过bundle但没有好处.

执行时,cucumber仍然会使用带有1.4.1系统版本的激活机架.Bundle指定应安装哪个gem但不确保激活哪个gem.

我怎么能激活某些版本的rack

ruby gem rack cucumber

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

从TestCase调用Sinatra应用程序实例方法

我在一个Sinatra应用程序中有一个util方法,我想从我的测试中进行测试TestCase.

问题是我不知道如何调用它,如果我只是使用app.util_method我有错误NameError: undefined local variable or method 'util_method' for #<Sinatra::ExtendedRack:0x007fc0c43305b8>

my_app.rb:

class MyApp < Sinatra::Base
  # [...] routes methods

  # utils methods
  def util_method
    return "hi"
  end
end
Run Code Online (Sandbox Code Playgroud)

my_app_test.rb:

require "my_app.rb"
require "test/unit"
require "rack/test"

class MyAppTest < Test::Unit::TestCase
  include Rack::Test::Methods

  def app
    MyApp.new
  end

  # [...] routes methods tests

  def test_util_method
    assert_equal( "hi", app.util_method )
  end
end
Run Code Online (Sandbox Code Playgroud)

ruby rack sinatra

13
推荐指数
1
解决办法
3542
查看次数

你如何在Sinatra中选择你的HTTP服务器?

我在本地运行Sinatra应用程序.

自从我安装了Thin之后,我的Sinatra应用程序总是将它用作Web服务器.但是,我一直在使用Thin提供应用程序所需的大量静态文件的性能问题,我想切换到Mongrel或WEBrick.

我似乎无法弄清楚如何将我的应用程序切换到Mongrel或WEBrick.即使我放在app.rb的顶部require 'mongrel'或者require 'webrick'在我的顶部ruby app.rb,Sinatra仍然以Thin开头.

所以,我的问题是:如何指定Sinatra的Web服务器在开发模式下使用?另外,我怎么能在生产模式下这样做?

rack mongrel thin webrick sinatra

13
推荐指数
1
解决办法
9798
查看次数