Ruby on rails Rails 5.2,Capybara启动的Puma服务器未设置会话cookie

Ruby on rails Rails 5.2,Capybara启动的Puma服务器未设置会话cookie,ruby-on-rails,capybara,Ruby On Rails,Capybara,MyRails应用程序使用会话,或者换句话说,使用由控制器响应自动在cookie头中设置的会话id 除了通过Capybara启动应用程序,然后出于某种原因,响应头从不包含Set Cookie,这一切都很正常 请求是否来自selenium启动的浏览器并不重要。我可以卷曲到水豚启动的彪马服务器,也永远不会得到饼干集 我查看了由Capybara Puma服务器启动的中间件,它似乎像普通服务器一样包含会话和cookie组件。不过,我在网上找不到任何关于这方面的信息,而且在Rails5.2中永远没有进行系

MyRails应用程序使用会话,或者换句话说,使用由控制器响应自动在cookie头中设置的会话id

除了通过Capybara启动应用程序,然后出于某种原因,响应头从不包含
Set Cookie
,这一切都很正常

请求是否来自selenium启动的浏览器并不重要。我可以卷曲到水豚启动的彪马服务器,也永远不会得到饼干集

我查看了由Capybara Puma服务器启动的中间件,它似乎像普通服务器一样包含会话和cookie组件。不过,我在网上找不到任何关于这方面的信息,而且在Rails5.2中永远没有进行系统测试的会话似乎是一个大问题。所以我想我一定是做错了什么,但不知道会是什么

以下是一个普通请求示例:

Host: localhost:3000
Connection: keep-alive
Upgrade-Insecure-Requests: 1
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8
User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10_13_6) AppleWebKit/605.1.15 (KHTML, like Gecko) Version/11.1.2 Safari/605.1.15
Accept-Language: en-us
DNT: 1
Accept-Encoding: gzip, deflate

HTTP/1.1 200 OK
X-Frame-Options: ALLOWALL
X-XSS-Protection: 1; mode=block
X-Content-Type-Options: nosniff
X-Download-Options: noopen
X-Permitted-Cross-Domain-Policies: none
Referrer-Policy: strict-origin-when-cross-origin
Content-Type: text/html; charset=utf-8
ETag: W/"bb9f6e144809fdf8359cec8ca0cbfc09"
Cache-Control: max-age=0, private, must-revalidate
Set-Cookie: _rails_app_session=......................; path=/; HttpOnly
X-Meta-Request-Version: 0.6.0
X-Request-Id: a2f2591b-7523-4c32-98a0-1d1fdc0fd231
X-Runtime: 0.867249
Vary: Origin
Transfer-Encoding: chunked
请注意
设置Cookie:\u rails\u app\u session=存在

下面是一个打水豚服务器的例子:

GET /calculator HTTP/1.1
Host: localhost:3030
Connection: keep-alive
Upgrade-Insecure-Requests: 1
User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10_13_6) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/68.0.3440.106 Safari/537.36
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,image/apng,*/*;q=0.8
Accept-Encoding: gzip, deflate, br
Accept-Language: en-US,en;q=0.9

HTTP/1.1 200 OK
X-Frame-Options: ALLOWALL
X-XSS-Protection: 1; mode=block
X-Content-Type-Options: nosniff
X-Download-Options: noopen
X-Permitted-Cross-Domain-Policies: none
Referrer-Policy: strict-origin-when-cross-origin
Content-Type: text/html; charset=utf-8
ETag: W/"040559a7884c3251acd2082604a43cf3"
Cache-Control: max-age=0, private, must-revalidate
X-Request-Id: 2bc191c6-66e9-4fe6-a8d2-7980f6cc66ed
X-Runtime: 0.146430
Vary: Origin
Transfer-Encoding: chunked

Capybara启动与您的开发实例之间的最大区别在于它运行的模式(测试与开发)——检查您的
config/environments/test.rb
vs
config/environments/development.rb
以查看会话/cookie设置是否存在任何差异。还要检查
config/secrets.yml
之类的内容,以确保您有
测试
环境的条目,因为加密cookie需要这些条目。请检查这些条目。没有什么不对劲的。这两个环境在
secrets.yml
中共享相同的
secret\u key\u base
,在
test.rb
中似乎也没有任何问题。但它确实似乎与
test
模式有关,而不是专门针对水豚。我可以使用
RAILS\u ENV=test运行服务器,但它也无法设置cookie。