Rails 5:将水豚与 Phusion 乘客一起使用

Rails 5: Using Capybara with Phusion Passenger

我正在尝试 运行 Rails 5 应用程序的规格。但是,我看到以下 LoadError:

Failure/Error: raise LoadError, 'Capybara is unable to load puma for its server, please add puma to your project or specify a different server via something like Capybara.server = :webrick.'

我正在使用 passenger gem 作为生产服务器。有没有办法让我也可以使用 passenger 进行 Capybara 测试? 提前致谢

我认为你做不到:

capybara documentation:

This block takes a rack app and a port and returns a 
rack server listening on that port

来自passenger repo

This is fundamentally incompatible with Phusion Passenger's model. 
Such a Rack handler implies a single application and a single process.
Phusion Passenger runs multiple processes which can even serve multiple 
applications.

如果您真的想在测试时使用 passenger 运行 您的应用程序,您将需要使用 rails 测试环境(因此它使用测试数据库等)与 passenger 单独启动您的应用程序) 然后设置

Capybara.run_server = false
Capybara.app_host = "http://<wherever the app is accessible>"

供您测试。这会告诉 Capybara 不要为 运行ning 应用程序本身而烦恼,而只需连接到您已经 运行ning 的应用程序。您还需要使用 database_cleaner 之类的东西来处理测试之间的数据库重置,并且要非常小心以确保在每次测试结束时没有任何剩余请求 运行ning。

当 运行使用 pumawebrick none 进行测试时(rails 通常需要 database_cleaner < 5.1 但不是 5.1+),因为 Web 服务器 运行 在与测试相同的进程(不同线程)中,这允许 Capybara 知道何时仍在处理请求并让 Rails 共享与测试的数据库连接。总的来说,如果您坚持使用 pumawebrick 进行测试,您将获得更加流畅的体验。