【问题标题】:How do I change the default port (9000) that Play uses when I execute the "run" command?当我执行“运行”命令时,如何更改 Play 使用的默认端口 (9000)?
【发布时间】:2011-11-20 21:56:34
【问题描述】:

在游戏控制台上发出“运行”命令时,如何更改游戏框架在开发模式下使用的默认端口。

这适用于 playframework 2.0 beta。

在命令行或 application.conf 中使用 http.port 配置参数似乎没有任何效果:

C:\dev\prototype\activiti-preso>play run --http.port=8080
[info] Loading project definition from C:\dev\prototype\activiti-preso\project
[info] Set current project to activiti-preso (in build file:/C:/dev/prototype/activiti-preso/)


Windows, really? Ok, disabling colors.

--- (Running the application from SBT, auto-reloading is enabled) ---

[error] org.jboss.netty.channel.ChannelException: Failed to bind to: 0.0.0.0/0.0.0.0:9000
[error] Use 'last' for the full log.

【问题讨论】:

  • @PereVillega 这很有趣,因为这是真的:github.com/playframework/playframework/blob/…
  • 在我看到“Windows,真的吗?”之后我不得不让我的 Windows 使用同事检查它是否仍然这样做。我们使用的是 2.2.0,它不再显示该消息,但它确实禁用了颜色。我怀疑它只是在测试版中。
  • 将 PlayKeys.devSettings := Seq("play.server.http.port" -> "9001") 放入 build.sbt

标签: playframework port playframework-2.0


【解决方案1】:

播放 2.x

在 Play 2 中,这些是通过 sbt 插件实现的,因此以下说明实际上只是 sbt 任务。你可以使用任何 sbt runner (e 在 Play 2 中,这些都是用一个 sbt 插件实现的,所以下面真的只是 sbt 任务。您可以使用任何 sbt 运行器(例如 sbtplayactivator)。在sbt 下方使用了跑步者,但是 您可以将其替换为您选择的 sbt 跑步者。

播放 2.x - 开发模式

对于浏览器重新加载模式:

sbt "run 8080"

对于连续重载模式:

sbt "~run 8080"

播放 2.x - 调试模式

要使用端口 8080 上的 http 侦听器在调试模式下运行,请运行:

sbt -jvm-debug 9999 "run 8080"

播放 2.x - Prod 模式

在 Prod 模式下启动:

sbt "start -Dhttp.port=8080"

Play 2.x - 分阶段分发

创建分阶段分发:

sbt stage

对于 Play 2.0.x 和 2.1.x,使用 target/start 脚本(仅限 Unix):

target/start -Dhttp.port=8080

对于 Play 2.2.x 和 2.3.x,使用 target/universal/stage/bin 目录中的相应启动脚本:

target/universal/stage/bin/[appname] -Dhttp.port=8080

在 Windows 上使用 Play 2.2.x 和 2.3.x:

target\universal\stage\bin\[appname].bat -Dhttp.port=8080

Play 2.x - Zip 分发

创建 zip 分发:

sbt dist

对于 Play 2.0.x 和 2.1.x,使用解压后的 zip 中的 start 脚本(仅限 Unix):

start -Dhttp.port=8080

对于 Play 2.2.x,使用 [appname]-[version]/bin 目录中的相应脚本:

[appname]-[version]/bin/[appname] -Dhttp.port=8080

在 Windows 上使用 Play 2.2.x:

[appname]-[version]\bin\[appname].bat -Dhttp.port=8080

播放 1.x

更改conf/application.conf 文件中的http.port 值或通过命令行传递:

play run --http.port=8080

【讨论】:

  • 有趣的是,这实际上并不奏效。但也许这只是我的系统的一个错误或问题。
  • 我相信现在这仅适用于 1.x,尚未在 2.0 beta 中实现
  • 我正在运行 Play 2.0。当我尝试play run 8080 时,它仍然在 9000 上运行。我在 Mac 上。是什么赋予了? 编辑: play "run 8080" 有效!
  • @StefanK。您不能将端口放在 Play 配置文件中,因为直到 Play 侦听端口后才会读取配置。您可以使用 env var 并将端口设置为此。
  • @James 我已经提交了以下问题和解决方法:github.com/sbt/sbt-native-packager/issues/155。谢谢!
【解决方案2】:

玩 2.0-RC4

在要运行的播放命令周围加上引号很重要。在我的情况下,如果没有引号,play 仍然会在端口 9000 上运行。

play "run 8080"

或者,您可以从播放控制台运行以下命令(输入“播放”以进入控制台)

run 8080

【讨论】:

  • 对于在 Windows 上运行的人,第二个选项对我有用(Play 2.0.4 final)。
【解决方案3】:

希望这对某人有所帮助。

通过 sbt 设置:

...
.settings(PlayKeys.playDefaultPort := 8855)
...

【讨论】:

  • 这是正确答案!谢谢! (对于像我这样的其他 SBT 和 Play 新手,请将 .settings 行添加到您的 build.sbt 文件中,在 lazy val root = (project in file(".")) 之后。有关 SBT 设置的更多详细信息,请参见此处:scala-sbt.org/1.0/docs/Custom-Settings.html
  • 这是我发现的唯一适用于 play 2.7.x 的解决方案
【解决方案4】:

2.0.3 版

  • 进入项目目录,然后说play(然后什么都没有)。 这将打开播放控制台。

  • 接下来,说运行 8080。这将在端口 8080 上开始播放。

我希望这会有所帮助。

【讨论】:

    【解决方案5】:

    对于带有可分发 tar 文件的 Windows 上的 Play 2.2.x,我在可分发的根目录中创建了一个名为:{PROJECT_NAME}_config.txt 的文件并添加了:

    -Dhttp.port=8080
    

    其中 {PROJECT_NAME} 应替换为您的项目名称。然后像往常一样在 bin\ 目录中启动 {PROJECT_NAME}.bat 脚本。

    【讨论】:

    • 在 Windows 中(使用 dist 和 zip 选项),传递命令行参数不起作用(播放 2.2.0)。但是在配置文件中提供相同的参数就像一个魅力。
    【解决方案6】:

    在 Windows 上播放 2.2.0

    使用 zip 分发(使用“dist”命令生成),我能够更改启动端口的唯一方法是首先设置 JAVA_OPTS,然后启动应用程序。

    例如,从命令行

    set JAVA_OPTS=-Dhttp.port=9002
    bin\myapp.bat
    

    其中 myapp.bat 是“dist”命令创建的批处理文件。

    以下将始终忽略我的 http.port 参数并尝试在默认端口 9000 上启动

    bin\myapp.bat -Dhttp.port=9002
    

    但是,我注意到这在 Linux/OSX 上运行良好,在请求的端口上启动:

    ./bin/myapp -Dhttp.port=9002
    

    【讨论】:

      【解决方案7】:

      适用于 Play 2.3.x

      激活器“运行 -Dhttp.port=9001”

      【讨论】:

        【解决方案8】:

        只需在您的build.sbt 中添加以下行

        PlayKeys.devSettings := Seq("play.server.http.port" -> "8080")

        【讨论】:

          【解决方案9】:

          你也可以在项目目录.sbtopts中设置HTTP端口:

          -Dhttp.port=9001
          

          那么你就不必每次都记得将其添加到run任务中。

          使用 Play 2.1.1 测试。

          【讨论】:

            【解决方案10】:

            适用于 Play 2.5.x 和 Play 2.6.x

            sbt "-Dhttp.port=9002"
            

            然后

            run
            

            【讨论】:

              【解决方案11】:

              通过今天(11 月 25 日)引入的提交,您现在可以在 runstart sbt 命令之后指定端口号。

              例如

              play run 8080play start 8080

              播放默认为端口 9000

              【讨论】:

              • 感谢最新的更新!我更新了詹姆斯的答案以添加您的信息,也许我们可以在这里建立一个规范的答案。
              【解决方案12】:

              在 Windows 上,播放“运行 9001”可能不起作用。您必须更改 play.bat 文件。见Ticket

              【讨论】:

              • 在此处快速指出如何更改 play.bat 文件可能很有价值,以防链接中断(并更快地帮助寻求 SO 帮助的人)。
              【解决方案13】:

              如果您想从端口 8888 运行它,只需在游戏控制台中输入 run 8888。

              play> run 8888
              

              【讨论】:

                【解决方案14】:

                玩 2.5.x

                第 1 步:使用 control + D 停止 netty 服务器(如果它正在运行)

                第 2 步:转到 sbt-dist/conf

                第3步:用这个编辑这个文件'sbtConfig.txt'

                -Dhttp.port=9005
                

                第四步:启动服务器

                第 5 步:http://host:9005/

                【讨论】:

                  【解决方案15】:

                  指定开发中的端口

                  默认情况下,SBT 在端口 9000 上运行应用程序:

                  sbt run
                  

                  要指定端口添加 -Dhttp.port 标志,例如:

                  sbt run -Dhttp.port=8080
                  

                  使用 -Dhttp.port 标志,您可以在开发机器上调试多个应用程序。请注意,您也可以在测试和生产环境中使用 -Dhttp.port 标志。

                  【讨论】:

                    【解决方案16】:

                    我注意到没有人提到通过环境变量(CI/CD 友好)实现这一点。

                    export PLAY_HTTP_PORT=1234
                    export PLAY_HTTPS_PORT=1235
                    

                    设置后,Play 将在执行sbt runsbt start 或运行用于产品部署的可执行文件时从这些环境变量中读取以确定端口。请参阅docs 了解更多信息。

                    【讨论】:

                    • 谢谢!在得到你的建议之前,我尝试了所有其他建议,但都没有奏效。你做的:)
                    【解决方案17】:

                    Windows 上的 Play 2.2.1 支持 PLAY_OPTS 环境变量。 Play 的 play.bat 文件包含这一行:

                    java -Dsbt.ivy.home="%~dp0repository" -Dplay.home="%~dp0framework" -Dsbt.boot.properties="%fp%framework/sbt/play.boot.properties" %PLAY_OPTS% -jar "%~dp0framework\sbt\sbt-launch.jar" %*
                    

                    所以要在端口 9002 上运行,请执行

                    set PLAY_OPTS=-Dhttp.port=9002
                    play run
                    

                    【讨论】:

                      【解决方案18】:

                      使用 2.3.7 Play 框架测试。效果很好。

                      ./{application}/bin/{executable} -Dhttp.port=5000
                      

                      【讨论】:

                        【解决方案19】:

                        我做到了。 sudo 是必须的。

                        $ sudo play debug -Dhttp.port=80
                        ...
                        [MyPlayApp] $ run
                        

                        编辑:由于使用sudo,我遇到了问题,所以要小心。最后我清理了项目,我不再使用那个技巧了。

                        【讨论】:

                        • 这取决于您的发行版(Ubuntu...)以及您是否以 root 身份登录。
                        【解决方案20】:

                        我们使用的是 Play 2.5.6 版。

                        要更改端口,请转到您的项目根文件夹并点击: activator "run 8008" 在命令提示符/终端中。

                        就是这样。

                        【讨论】:

                          【解决方案21】:

                          在 Windows 上,我使用这样的 start.bat 文件:

                          java -Dhttp.port=9001 -DapplyEvolutions.default=true -cp "./lib/*;" play.core.server.NettyServer "."
                          

                          -DapplyEvolutions.default=true 告诉进化自动应用进化而不要求确认。在生产环境中谨慎使用,当然...

                          【讨论】:

                            【解决方案22】:

                            我们无法从 avtivator 更改应用程序端口,但可以从命令行激活器“~run 8080”进行更改

                            但是要从激活器在诗人 9000 上运行,我们需要停止使用此端口的应用程序。我们可以使用这个应用程序找到它并结束进程https://technet.microsoft.com/en-in/sysinternals/bb897437.aspx

                            这样我们就可以运行了,就成功了。

                            【讨论】:

                              【解决方案23】:

                              您可以使用其他选项在项目根目录内的.jvmopts 文件中设置它:

                              -Dhttp.port=9100
                              

                              您还可以添加其他选项,例如加载不同的配置文件

                              -Dconfig.file=<config_file_absolute_path>
                              

                              设置.jvmopts 文件后,您无需记住在命令行中添加一些参数,只需执行以下操作:

                              sbt run
                              

                              【讨论】:

                                【解决方案24】:

                                在 2.8.X 版本中,您可以使用特定资源文件或特定端口运行(如果只是 sbt 运行,您将使用 application.conf 和默认端口 9000)

                                sbt run -Dconfig.resource=application.Local.conf -Dhttp.port=9002

                                【讨论】:

                                  猜你喜欢
                                  • 2014-11-20
                                  • 2020-09-22
                                  • 1970-01-01
                                  • 1970-01-01
                                  • 1970-01-01
                                  • 2014-07-01
                                  • 2021-07-19
                                  • 1970-01-01
                                  • 1970-01-01
                                  相关资源
                                  最近更新 更多