【问题标题】:How to deploy RailsPDF on Heroku?如何在 Heroku 上部署 RailsPDF?
【发布时间】:2019-09-03 19:07:03
【问题描述】:

我正在尝试在 Heroku 应用程序上部署 RailsPDF,但不知道从哪里开始,因为它需要 Node.js / npm。

我们需要使用 Rails 生成 PDF,并且它们必须包含 JavaScript 生成的图表。后者几乎排除了 Prawn,并且 wicked_pdf / wkhtmltopdf 至少在我们的环境中被证明是非常耗费资源和不稳定的(更不用说 PDF 经常不完整)。

我一直在玩弄一个相对较新的宝石,RailsPDF。与 wkhtmltopdf 一样,它直接将视图呈现为 PDF 文件,但通过 Puppeteer / RelaxedJS 使用当前的 Chrome 版本。所以它既灵活又更稳定。

在本地我可以很好地运行它。不过我还没有弄清楚如何在 Heroku Rails 应用程序上部署它,如Node / npm are required to install RelaxedJS

如何在 Heroku 上的 Ruby 应用程序中使用 Node.js / npm 依赖项?

【问题讨论】:

  • 你只会在 Rails 应用程序中使用 js gems 对吗?您将不需要机器中的 node/npm。
  • 你只需部署应用程序,heroku 会处理依赖关系。
  • 本地安装需要 npm(我已经编辑了我的问题以包含 RailsPDF 安装说明的链接)和 AFAIK,这可能超出了 Heroku 的依赖处理。还是我错了?

标签: ruby-on-rails pdf heroku


【解决方案1】:

使用multiple buildpacks:

  1. 设置你的主构建包

    heroku buildpacks:set heroku/ruby
    
  2. 添加 Node.js 构建包

    heroku buildpacks:add --index 1 heroku/nodejs
    

    确保在项目的根目录中包含package.json,因为 Node.js 构建包需要一个。

  3. 通过运行.heroku buildpacks 验证您是否配置了正确的构建包。您应该首先看到 Node.js,然后看到 Ruby。最后一个构建构建包应该是您的主要构建包。

下次部署应用程序时,您应该会看到正在构建的 Node.js 依赖项,然后是 Ruby 依赖项。 node 和任何 dependencies 都将在运行时可用(尽管 by default devDependencies won't be)。

听起来您还需要添加Chrome buildpackChromedriver buildpack。您可能需要提供比上述简短的heroku/foo 更长的参数;有关详细信息,请参阅每个 buildpack 页面的底部。

记得在添加更多内容时将 Ruby 作为最后一个 buildpack。

【讨论】:

  • 谢谢!到目前为止还没有使用 Node.js 的经验,我猜在package.json 中我只会列出relaxedjs,对吗?然后 npm 应该在 Heroku 服务器上安装它自己的依赖项,在我部署应用程序时自动安装,对吗?
  • 是的,类似的。你是如何在本地机器上安装 ReLaXed 的?你是用npmyarn,还是做别的?
  • 是的,我使用了npm,它现在是应用程序中的一个子文件夹。这只是暂时的,显然与 git 和部署等有关;现在知道应该如何在 Heroku 上完成它,在我的本地机器上全局安装 RelaxedJS 会更有意义,然后按照上面的说明在服务器上进行部署。
  • “应用程序中的子文件夹”我猜你的意思是node_modules/?那不应该在你的回购中。在存储库的根目录中运行npm init,然后运行npm install relaxedjs。这应该会创建一个合理的 package.jsonpackage-lock.json,两者都应该提交给 repo。
  • 太棒了,谢谢!我让它工作了; gem 的一项重要更改是仅使用“--no-sandbox”参数运行 chromedriver。不幸的是,我的 slug 大小增加了两倍多,超过 300 MB,但这是另一天的问题。
猜你喜欢
  • 2013-12-09
  • 1970-01-01
  • 2021-03-13
  • 2015-05-15
  • 2020-10-05
  • 2021-05-01
  • 2012-10-28
  • 2018-03-04
  • 2020-10-13
相关资源
最近更新 更多