Vapor部署到Heroku,日志错误代码= H10 desc =" App崩溃"方法= GET

时间:2017-12-26 10:03:30

标签: heroku swift4 vapor

经过多次研究和尝试,我仍然无法解决问题。我使用Vapor Toolbox: 3.1.2& Vapor Framework: 2.3.0和Swift 4.0.3(macos-high-sierra上的Xcode 9.2)构建一个简单的网站(没有数据库)。但运行vapor heroku push成功后,我尝试转到heroku dashboard打开我的网站,但它没有成功。我尝试运行heroku logs并得到崩溃的结果:

2017-12-26T09:04:10.000000+00:00 app[api]: Build succeeded
2017-12-26T09:10:00.192686+00:00 heroku[web.1]: Process exited with status 127
2017-12-26T09:10:00.207462+00:00 heroku[web.1]: State changed from starting to crashed
2017-12-26T09:10:00.210981+00:00 heroku[web.1]: State changed from crashed to starting
2017-12-26T09:10:03.369454+00:00 heroku[web.1]: Starting process with command `leeswift --env=production --port=19489`
2017-12-26T09:10:00.072884+00:00 app[web.1]: bash: leeswift: command not found
2017-12-26T09:10:05.460027+00:00 app[web.1]: bash: leeswift: command not found
2017-12-26T09:10:05.560609+00:00 heroku[web.1]: Process exited with status 127
2017-12-26T09:10:05.594754+00:00 heroku[web.1]: State changed from starting to crashed
2017-12-26T09:11:28.858638+00:00 heroku[router]: at=error code=H10 desc="App crashed" method=GET path="/" host=leeswift.herokuapp.com request_id=0eab887e-dba0-488e-b3f6-899de07898d6 fwd="118.69.108.38" dyno= connect= service= status=503 bytes= protocol=https

请帮我解决。

3 个答案:

答案 0 :(得分:1)

  

bash:leeswift:找不到命令

您的heroku buildpack无法找到Steam应用程序生成的可执行文件。这可能是应用程序名称/路径的问题。我还没有使用过heroku,但是根据你的编译模式,Swift会在.build/release/<my-app>.build/debug/<my-app>中生成它的可执行文件。

答案 1 :(得分:1)

请按照以下步骤解决您的问题。

如何在Vapor框架的帮助下创建快速后端API。市场上也有另一种框架。但是我们选择的是快速蒸气。

开始吧。

在系统中安装蒸气。

第1步。运行以下命令以安装蒸气

brew install vapor/tap/vapor-beta

根据以下命令检查是否安装了蒸气。

vapor-beta --help

这些将对蒸气有用。

仅在项目目录中时命令。 你可以

# Created vapor project
vapor new myProjectName

# Build vapor project 
vapor build

# Run vapor project
vapor run 

# You can configure Xcode. You should be inside created project directory. 
vapor Xcode

在项目文件中进行更改或添加新功能以进行更新时,您将具有以下命令。

vapor Xcode

您可以通过本地服务器测试API运行。将会是“ Hello World”

curl http://localhost:8080/hello 

=========================================== PostgreSQL设置== ===========================================

设置本地PrortgeSQL。运行以下命令。

brew install postgresql

启动本地数据库服务器。在命令下运行

pg_ctl -D /usr/local/var/postgres start

停止本地数据库服务器。运行以下命令。

pg_ctl -D /usr/local/var/postgres stop

当您希望通过启动将PostgreSQL作为后台服务运行时,可以使用brew服务器。运行以下命令。

brew services start postgresql

由此启动Postgres。

psql -d postgres

通过运行以下命令来创建数据库:

create databas databaseName
create databas ashi-app # Actual command 

通过运行以下命令来创建用户:-通过运行以下命令来授予该用户所需的特权。

create user username
create user ashi-app-user # Actual command

grant all privileges on database databaseName to userName
# Actual command
grant all privileges on database ashi-app to ashi-app-user

=========================================== PostgreSQL设置== =========================================

=============================================部署新的应用程序Heroku =============================================== < / p>

无需数据库即可在Heroku上部署新的swift vapor应用。

考虑您已经创建了没有数据库的Vapor项目。

步骤1。在cd MyApp上导航。

cd myApp
# Actual command
cd ashi-api

步骤2。在根项目目录中创建swift版本文件。在终端上运行以下内容。

echo 5.1.3 > .swift-version

第3步。在根项目目录中创建Procfile文件。在终端上运行以下内容。

echo web: Run serve --env production --hostname 0.0.0.0 --port $PORT > Procfile 

第4步。添加文件git并通过以下命令提交

git add .

git commit -m ‘App Setup’

第5步。您应该通过以下命令生成linux测试文件。

swift test --generate-linuxmain

第6步。再次通过以下命令在git中修改。

git add .

git commit -m ‘Tests setup’

第7步。登录Heroku。在heroku上创建要部署的应用程序所必需。因此,我们已经登录了heruko。通过运行以下命令,我们可以登录。

heroku login

步骤8。登录完成后,创建heroku应用。我们必须最喜欢的唯一名称是app-appname。

heroku apps: create myAppName
heroku apps: create ashi-api # Actual command

第9步。通过应用添加快速构建包。为了在此进行编译,我们必须添加buildback。 Heroku不支持Swift的内置包。

heroku buildpacks:set https://github.com/vapor-community/heroku-buildpack -a myproject

# Actual command
heroku buildpacks:set https://github.com/vapor-community/heroku-buildpack -a ashi-api

步骤10。在服务器上查找命令推送更改。

git push heroku master

现在您的应用程序和API将可以进行测试…

=============================================部署新的应用程序Heroku =============================================== < / p>

=======================使用已部署的应用程序和下一个部署版本设置数据库=============== ===================

步骤1.执行数据库配置。用postgreSQL替换sqlite数据库。因为Heroku不支持sqlite。

在App-> configure.swift中替换。并导入Todo.h TodoController.h

import FluentPostgreSQL

// Configure a PostgreSQL database
    let postgreSQLConfig: PostgreSQLDatabaseConfig
    
    if let url = Environment.get("DATABASE_URL") {
      postgreSQLConfig = PostgreSQLDatabaseConfig(url: url)!
    } else {
      postgreSQLConfig = PostgreSQLDatabaseConfig(hostname: "localhost", username: "app_test")
    }
    let postgreSQL = PostgreSQLDatabase(config: postgreSQLConfig)

    // Register the configured PostreSQL database to the database config.
    var databases = DatabasesConfig()
    databases.add(database: postgreSQL, as: .psql)
    services.register(databases)

步骤2。通过运行安装带有自制程序的heroku命令。

brew tap heroic/brew && brew install heroku

第3步。我们可以通过运行命令在应用程序中添加postgreSQL。

heroic addons:create heroic-postgresql:hobby-dev

第4步。通过运行以下命令在git中添加更新文件。

git add .

git commit -m ‘Added PostgreSQL file’

第5步。在服务器上查找命令推送更改。

git push heroku master

第二个版本将可用于使用postgreSQL进行测试。

=======================使用已部署的应用程序和下一个部署版本设置数据库=============== ===================

答案 2 :(得分:0)

我认为你在'Procfile&#39;中有错误。文件。例如,这是我的:

web: Run --env=production --workdir=./ --config:servers.default.port=$PORT