【问题标题】:Assets not found when deploying Sails app to Heroku将 Sails 应用程序部署到 Heroku 时找不到资产
【发布时间】:2018-12-25 04:09:31
【问题描述】:

我是 Sails 的新手。

我从 Sails 模板创建了一个新的网络应用程序,并尝试将其上传到 Heroku。一切都很好,除了资产,没有找到任何资产(js、css、图像等)。

我发现 Sails 使用 Grunt 将文件复制到 .tmp 文件夹。我已经检查过了,我已将 Grunt 添加到我的 package.json 文件中。我还添加了一个带有 web: node app.js 命令的 Procfile 和指向 Heroku 中 productionNODE_ENV 变量。

我没有更改任何 Grunt 任务,Gruntfile.js 文件和 /tasks 目录是默认的。

还有什么我可以检查的想法吗?

【问题讨论】:

    标签: heroku sails.js


    【解决方案1】:

    我通过不同的方式解决了这个问题。除了在 OP 的答案中包含一些 grunt 部门之外,我还在 package.json 的脚本部分添加了 postinstall

      "scripts": {
        "start": "NODE_ENV=production node app.js",
        "test": "npm run lint && npm run custom-tests && echo 'Done.'",
        "lint": "eslint . --max-warnings=0 --report-unused-disable-directives && echo '✔  Your .js files look so good.' && htmlhint -c ./.htmlhintrc views/*.ejs && htmlhint -c ./.htmlhintrc views/**/*.ejs && htmlhint -c ./.htmlhintrc views/**/**/*.ejs && htmlhint -c ./.htmlhintrc views/**/**/**/*.ejs && htmlhint -c ./.htmlhintrc views/**/**/**/**/*.ejs && htmlhint -c ./.htmlhintrc views/**/**/**/**/**/*.ejs && htmlhint -c ./.htmlhintrc views/**/**/**/**/**/**/*.ejs && echo '✔  So do your .ejs files.' && lesshint assets/styles/ --max-warnings=0 && echo '✔  Your .less files look good, too.'",
        "custom-tests": "echo \"(No other custom tests yet.)\" && echo",
        "postinstall": "grunt build", // added this
    ...
    

    这对 heroku 的影响是需要运行 grunt 任务 build,它将资产编译并复制到适当引用的位置(即:.tmp

    【讨论】:

      【解决方案2】:

      解决方案非常简单。事实证明,我没有为生产环境添加 Grunt 依赖项,仅在我的package.json 中为开发环境添加。我已经添加了它们并且运行良好。

      "dependencies": {
          "@sailshq/connect-redis": "^3.2.1",
          "@sailshq/lodash": "^3.10.3",
          "@sailshq/socket.io-redis": "^5.2.0",
          "async": "2.0.1",
          "sails": "^1.0.2",
          "sails-hook-apianalytics": "^2.0.0",
          "sails-hook-organics": "^0.13.0",
          "sails-hook-orm": "^2.0.0-16",
          "sails-hook-sockets": "^1.4.0",
          "sails-postgresql": "^1.0.1",
          "grunt": "1.0.1", // I've added these two lines
          "sails-hook-grunt": "^3.0.2" // I've added these two lines
      },
      "devDependencies": {
          "@sailshq/eslint": "^4.19.3",
          "@sailshq/htmlhint": "^0.9.16",
          "@sailshq/lesshint": "^4.6.6",
          "grunt": "1.0.1",
          "sails-hook-grunt": "^3.0.2"
      },
      

      【讨论】:

      • grunt 和sails-hook-grunt 都是devDependencies,因此不应添加到依赖部分。如果您观察 Heroku 日志,您会看到有一个 devDependencies 修剪步骤,该步骤将这些包从您的生产环境中删除。这对于维持清洁生产系统很重要。按照 Phillip M. 的建议添加安装后步骤会更好。
      • 感谢您的澄清!我只会在这里留下我的答案,因为您的评论可能对其他人有用。我指出这一点是因为我收到了反对票,即使我已经选择了 Phillip M. 的答案作为正确答案。
      猜你喜欢
      • 2016-05-25
      • 1970-01-01
      • 2017-12-09
      • 2014-07-16
      • 1970-01-01
      • 2017-05-24
      • 2015-07-29
      • 1970-01-01
      • 2016-02-04
      相关资源
      最近更新 更多