如何在heroku按钮app.json中运行postdeploy脚本

时间:2016-12-05 23:12:45

标签: heroku

我尝试设置Heroku Button,我的应用需要几个post post脚本。不知道怎么把它放在每个旁边。

这是我的app.json

{
  "name": "App on Heroku",
  "description": "The App deployable to Heroku.",
  "keywords": [
    "App",
    "Heroku"
  ],
  "repository": "https://github.com/myaccount/myapp",
  "logo": "http://node-js-sample.herokuapp.com/node.svg",
  "addons": [
    "heroku-postgresql",
    "postmark"
  ],
  "scripts": {
    "postdeploy": [
        "bundle exec rake db:migrate",
        "bundle exec rake db:seed",
        "bundle exec my_sample:load"
       ]
  }
}

此处的错误消息

运行脚本&比例dynos

Postdeploy退出代码不是0

bash: ((: bundle exec rake db:migrate,bundle exec rake db:seed,bundle exec my_sample:load: syntax error in expression (error token is "exec rake db:migrate,bundle exec rake db:seed,bundle exec my_sample:load")

3 个答案:

答案 0 :(得分:2)

这对我有用:

  1. 在与app.json文件相同的目录中创建一个名为myscript.sh的bash / sh脚本(通常,这应该是您的根目录)。
  2. 将所有命令放在该文件中的方式与在终端中调用它们的方式相同。
  3. 引用app.json文件中的脚本(参见下文)
  4. 确保您的脚本具有正确的权限。最好运行chmod +x myscript.sh
  5. 我的 app.json 文件:

    {
      ...
      "scripts": {
        "postdeploy": "./myscript.sh"
      }
    }
    

    myscript.sh 文件:

    #!/bin/sh
    
    bundle exec rake db:migrate
    bundle exec rake db:seed
    bundle exec my_sample:load
    

答案 1 :(得分:0)

应该能够做到这一点(dokku示例,但heroku也是如此)

{
  "scripts": {
    "dokku": {
      "predeploy": "bundle exec rake db:migrate && bundle exec rake some:task"
    }
  }
}

答案 2 :(得分:0)

我发现此问题在搜索其他问题,但认为此文档相关 -https://devcenter.heroku.com/articles/release-phase#review-apps-and-the-postdeploy-script

要应用该文档并回答您的问题:

通过使用以下命令在Heroku Procfile中运行db:migrate命令,将架构设置与数据加载分开:

release: bundle exec rake db:migrate

然后将其他postdeploy步骤保留在app.json文件中。

  ...
  "scripts": {
    "postdeploy": "bundle exec rake db:seed && bundle exec rake my_sample:load"
  }
}```