当Rails服务器启动时如何自动打开浏览器?

5

当你运行rails server时,自动启动你的浏览器并将其指向http://localhost:3000的方法有吗?

第二个问题是确保这仅在开发环境中发生。

我原本以为Launchy可以解决这个问题,但我不知道该把它放在哪里。

我尝试添加一个初始化文件config/initializers/launchy.rb

require 'launchy'
Launchy.open("http://localhost:3000")

这将触发浏览器打开、创建一个新标签并访问http://localhost:3000,但是它在服务器/应用程序启动前运行,因此我在浏览器中得到了一个无法连接到服务器的错误。

如果我重新加载浏览器,我的应用程序就可以正常工作,因此我相信这不是我的应用程序的问题,而是Launch.open调用的时间问题。

我尝试将launchy.rb重命名为z_launchy.rb,使其根据文档最后加载,但仍然存在相同的问题。Launchy会在应用程序准备好之前触发。

我还尝试将代码添加到config/puma.rb(我使用puma作为服务器),添加到config/enviroments/developoment.rb,但始终存在相同的问题。 Launchy.open命令调用的太早了。

我应该在哪里调用Launchy.open("http://localhost:3000")以确保a)它在应用程序加载并准备好接收请求后运行; b)所以它只在开发中运行,而不是在测试或生产环境中运行?

系统设置:OS X 10.11.3,Rails 4.2.5,ruby 2.2.1p85,puma版本2.15.3


从Rails文档中(http://guides.rubyonrails.org/configuring.html#using-initializer-files):你的应用程序的一些部分,特别是路由,在调用after_initialize块的时候还没有设置好。 - Roman Kiselenko
1个回答

6
将它放入config.ru中,在run Rails.application行之后会起作用。当它返回时,您的应用程序已准备就绪。要仅在development中运行它,请检查Rails.env
require ::File.expand_path('../config/environment', __FILE__)
run Rails.application
Launchy.open("http://localhost:3000") if Rails.env.development?

这很简单,但我觉得在你的应用程序中放置这个代码会显得有些不妥。更好的方法是编写一个小脚本,启动服务器,等待一段时间,然后打开浏览器。

对我来说运行得太早了。run Rails.application 立即返回;只有在 config.ru 完成后,我才能看到 "Puma starting in single mode...",这需要几秒钟的时间... - Beni Cherniavsky-Paskin

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接