8

一些指南(示例)推荐这个来启动一个网络服务器

bundle exec rails server puma

但我总是直接启动puma服务器

bundle exec puma

通过 启动 puma (或任何其他服务器)时会发生什么特别的事情rails server吗?

4

1 回答 1

15

当您使用rails s <server>时,服务器会从 Rails 命令启动,并且知道 Rails 环境。

例如,这使得可以使用rails server command.

rails s --help
Usage: rails server [mongrel, thin, etc] [options]
    -p, --port=port                  Runs Rails on the specified port.
                                     Default: 3000
    -b, --binding=ip                 Binds Rails to the specified ip.
                                     Default: 0.0.0.0
    -c, --config=file                Use custom rackup configuration file
    -d, --daemon                     Make server run as a Daemon.
    -u, --debugger                   Enable ruby-debugging for the server.
    -e, --environment=name           Specifies the environment to run this server under (test/development/production).
                                     Default: development
    -P, --pid=pid                    Specifies the PID file.
                                     Default: tmp/pids/server.pid

    -h, --help                       Show this help message.

例如,您可以将调试器附加到传递--debugger或守护服务器的会话。

第二个优点是您可以对Puma实例进行版本控制,因为您必须在Gemfile. 如果你像现在这样开始,这已经是真的了bundle exec

相反,当您简单地运行$ puma(或$ bundle exec puma)时,您并没有通过 Rails 系统。Puma将尝试找到一个机架引导文件并使用它(它可以工作,因为 Railsconfig.ru在应用程序根目录中提供了一个脚本。

一般来说,如果您不需要将特定选项传递给服务器,则没有真正的区别。我喜欢 puma,即使在生产中我们使用 Unicorn,我也倾向于在某些项目中使用它,因此$ puma作为独立命令运行很方便,因为我不需要将它添加到Gemfile.

但是,$ rails s puma如果我的整个堆栈都使用Puma. 这也是文档中建议的命令

于 2014-01-19T14:33:30.360 回答