Dokku:部署、构建和服务中间人静态生成的网站

如何解决Dokku:部署、构建和服务中间人静态生成的网站

今天,我一直在尝试配置 Dokku 来部署我的一个静态生成的网站(用中间人构建):将中间人源推送到主机,在主机上生成网站,然后告诉 nginx 为这些网站提供服务静态文件。

根据这些资源 12,我设置了我的项目:

  1. 一个 .buildpacks 文件,包含一个用于构建站点的 buildpack,以及用于提供生成的静态 HTML 文件的 nginx buildpack:

    https://github.com/heroku/heroku-buildpack-ruby.git#v222
    https://github.com/dokku/buildpack-nginx.git#v14
    
  2. 一个 .static 文件,以便 nginx buildpack 知道它必须为静态网站提供服务

  3. 负责构建站点的预部署操作,使用 app.json :

    {
      "scripts": {
        "dokku": {
          "predeploy": "bundle exec middleman build",}
      }
    }
    

发生了什么?

显然,目前我正在尝试使用 predeploy 钩子构建我的中间人站点,但 bundle 命令不再可用。这是我得到的示例输出:

➜ git push dokku master
Enumerating objects: 397,done.
Counting objects: 100% (397/397),done.
Delta compression using up to 8 threads
Compressing objects: 100% (258/258),done.
Writing objects: 100% (397/397),819.50 KiB | 14.90 MiB/s,done.
Total 397 (delta 195),reused 244 (delta 111),pack-reused 0
remote: Resolving deltas: 100% (195/195),done.
-----> Cleaning up...
-----> Building site from herokuish...
-----> Adding BUILD_ENV to build environment...
-----> Warning: Multiple default buildpacks reported the ability to handle this app. The first buildpack in the list below will be used.
       Detected buildpacks: multi ruby static
-----> Multipack app detected
=====> Downloading Buildpack: https://github.com/heroku/heroku-buildpack-ruby.git
=====> Detected Framework: Ruby
-----> Installing bundler 2.1.4
-----> Removing BUNDLED WITH version in the Gemfile.lock
-----> Compiling Ruby/Rack
-----> Using Ruby version: ruby-2.6.3
-----> Installing dependencies using bundler 2.1.4
       Running: BUNDLE_WITHOUT='development:test' BUNDLE_PATH=vendor/bundle BUNDLE_BIN=vendor/bundle/bin BUNDLE_DEPLOYMENT=1 bundle install -j4
       Using concurrent-ruby 1.1.7
       Using i18n 0.9.5
       Using minitest 5.14.2
       Using thread_safe 0.3.6
       Using tzinfo 1.2.7
       Using activesupport 5.2.4.4
       Using public_suffix 4.0.6
       Using addressable 2.7.0
       Using execjs 2.7.0
       Using autoprefixer-rails 9.8.6.5
       Using backports 3.18.2
       Using bundler 2.1.4
       Using coffee-script-source 1.12.2
       Using coffee-script 2.4.1
       Using contracts 0.13.0
       Using dotenv 2.7.6
       Using erubis 2.7.0
       Using fast_blank 1.0.0
       Using fastimage 2.2.0
       Using ffi 1.13.1
       Using temple 0.8.2
       Using tilt 2.0.10
       Using haml 5.2.0
       Using hamster 3.0.0
       Using hashie 3.6.0
       Using rexml 3.2.4
       Using kramdown 2.3.0
       Using rb-fsevent 0.10.4
       Using rb-inotify 0.10.1
       Using listen 3.0.8
       Using memoist 0.16.2
       Using thor 1.0.1
       Using middleman-cli 4.3.11
       Using padrino-support 0.13.3.4
       Using padrino-helpers 0.13.3.4
       Using parallel 1.19.2
       Using rack 2.2.3
       Using sassc 2.4.0
       Using servolux 0.13.0
       Using uglifier 3.2.0
       Using middleman-core 4.3.11
       Using middleman 4.3.11
       Using middleman-autoprefixer 2.10.1
       Bundle complete! 3 Gemfile dependencies,43 gems now installed.
       Gems in the groups development and test were not installed.
       Bundled gems are installed into `./vendor/bundle`
       Bundle completed (0.52s)
       Cleaning up the bundler cache.
-----> Writing config/database.yml to read from DATABASE_URL
-----> Installing node-v12.16.2-linux-x64
-----> Detecting rake tasks

       ###### WARNING:

       No Procfile detected,using the default web server.
       We recommend explicitly declaring how to boot your server process via a Procfile.
       https://devcenter.heroku.com/articles/ruby-default-web-server

=====> Downloading Buildpack: https://github.com/dokku/buildpack-nginx.git
=====> Detected Framework: .static
-----> Copy static files to www
-----> Reusing nginx binary from cache
-----> Using default app-nginx.conf.sigil
-----> Using default mime.types
       Using release configuration from last framework (.static).
-----> Discovering process types
       Default types for  -> web
-----> Releasing site...
-----> Deploying site...
-----> Checking for predeploy task
-----> Executing predeploy task from app.json: bundle exec middleman build
=====> Start of site predeploy task (22fcf68dd) output
remote:  !     Execution of predeploy task failed: bundle exec middleman build
       /bin/bash: bundle: command not found
remote: 2021/01/02 15:06:19 exit status 1
remote: 2021/01/02 15:06:19 exit status 1
remote: 2021/01/02 15:06:19 exit status 1
=====> End of site predeploy task (22fcf68dd) output
To host:site
 ! [remote rejected] master -> master (pre-receive hook declined)
error: failed to push some refs to 'host:site'

我尝试了什么

  1. 我注意到第一个 buildpack 被执行,然后是第二个,然后 predeploy 钩子开始执行。

  2. 我尝试删除 nginx“静态服务”构建包并只保留 ruby​​ 构建包,并在我的预部署挂钩中保留一个 bundle 命令。它起作用了,但我没有收到“找不到命令”错误。所以切换到第二个 buildpack 对我来说似乎是一团糟。

  3. 我比较了使用和不使用 nginx“静态服务”构建包的路径,没有什么奇怪的。使用 nginx buildpack,添加了一个新路径,但之前设置的 ruby​​ 路径仍然存在:

    # with only ruby buildpack
    /app/bin:/app/vendor/bundle/bin:/app/vendor/bundle/ruby/2.6.0/bin:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin
    
    # with both ruby & nginx buildpacks
    /app/bin:/app/vendor/bundle/bin:/app/vendor/bundle/ruby/2.6.0/bin:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/app/nginx
    

最后,我有点迷失在这里。是预期的吗?我不是在遵循 dokku 的方式吗?是因为权限问题还是我不​​知道的 Dokku 问题?

现在,作为后备,我通过运行一个接收所有请求的中间人服务器来为网站提供服务,但动态地为静态生成的网站提供服务是没有意义的。

解决方法

感谢 jonrsharpe 的评论,我重新调整了搜索方向和 found this blog post on heroku engineering blog。最终,正如 jonrsharpe 所说:

Nginx buildpack 根本没有 Ruby - 您需要在 Ruby buildpack 上下文中进行任何构建,因此所有静态 buildpack 需要做的就是提供结果。

因此,要启动我的 middleman build 命令,我需要在 ruby​​ buildpack 中的某个地方挂钩。在“jekyll on heroku”链接中,一切都得到了解释:应该覆盖 assets:precompile rake 任务

我遵循的步骤

  1. gem "rake" 添加到我的 Gemfile(当然还有包)
  2. 使用 Rakefile 任务创建 assets:precompile
task "assets:precompile" do
  exec("middleman build")
end
  1. 享受吧!

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐


使用本地python环境可以成功执行 import pandas as pd import matplotlib.pyplot as plt # 设置字体 plt.rcParams['font.sans-serif'] = ['SimHei'] # 能正确显示负号 p
错误1:Request method ‘DELETE‘ not supported 错误还原:controller层有一个接口,访问该接口时报错:Request method ‘DELETE‘ not supported 错误原因:没有接收到前端传入的参数,修改为如下 参考 错误2:cannot r
错误1:启动docker镜像时报错:Error response from daemon: driver failed programming external connectivity on endpoint quirky_allen 解决方法:重启docker -> systemctl r
错误1:private field ‘xxx‘ is never assigned 按Altʾnter快捷键,选择第2项 参考:https://blog.csdn.net/shi_hong_fei_hei/article/details/88814070 错误2:启动时报错,不能找到主启动类 #
报错如下,通过源不能下载,最后警告pip需升级版本 Requirement already satisfied: pip in c:\users\ychen\appdata\local\programs\python\python310\lib\site-packages (22.0.4) Coll
错误1:maven打包报错 错误还原:使用maven打包项目时报错如下 [ERROR] Failed to execute goal org.apache.maven.plugins:maven-resources-plugin:3.2.0:resources (default-resources)
错误1:服务调用时报错 服务消费者模块assess通过openFeign调用服务提供者模块hires 如下为服务提供者模块hires的控制层接口 @RestController @RequestMapping("/hires") public class FeignControl
错误1:运行项目后报如下错误 解决方案 报错2:Failed to execute goal org.apache.maven.plugins:maven-compiler-plugin:3.8.1:compile (default-compile) on project sb 解决方案:在pom.
参考 错误原因 过滤器或拦截器在生效时,redisTemplate还没有注入 解决方案:在注入容器时就生效 @Component //项目运行时就注入Spring容器 public class RedisBean { @Resource private RedisTemplate<String
使用vite构建项目报错 C:\Users\ychen\work>npm init @vitejs/app @vitejs/create-app is deprecated, use npm init vite instead C:\Users\ychen\AppData\Local\npm-
参考1 参考2 解决方案 # 点击安装源 协议选择 http:// 路径填写 mirrors.aliyun.com/centos/8.3.2011/BaseOS/x86_64/os URL类型 软件库URL 其他路径 # 版本 7 mirrors.aliyun.com/centos/7/os/x86
报错1 [root@slave1 data_mocker]# kafka-console-consumer.sh --bootstrap-server slave1:9092 --topic topic_db [2023-12-19 18:31:12,770] WARN [Consumer clie
错误1 # 重写数据 hive (edu)> insert overwrite table dwd_trade_cart_add_inc > select data.id, > data.user_id, > data.course_id, > date_format(
错误1 hive (edu)> insert into huanhuan values(1,'haoge'); Query ID = root_20240110071417_fe1517ad-3607-41f4-bdcf-d00b98ac443e Total jobs = 1
报错1:执行到如下就不执行了,没有显示Successfully registered new MBean. [root@slave1 bin]# /usr/local/software/flume-1.9.0/bin/flume-ng agent -n a1 -c /usr/local/softwa
虚拟及没有启动任何服务器查看jps会显示jps,如果没有显示任何东西 [root@slave2 ~]# jps 9647 Jps 解决方案 # 进入/tmp查看 [root@slave1 dfs]# cd /tmp [root@slave1 tmp]# ll 总用量 48 drwxr-xr-x. 2
报错1 hive> show databases; OK Failed with exception java.io.IOException:java.lang.RuntimeException: Error in configuring object Time taken: 0.474 se
报错1 [root@localhost ~]# vim -bash: vim: 未找到命令 安装vim yum -y install vim* # 查看是否安装成功 [root@hadoop01 hadoop]# rpm -qa |grep vim vim-X11-7.4.629-8.el7_9.x
修改hadoop配置 vi /usr/local/software/hadoop-2.9.2/etc/hadoop/yarn-site.xml # 添加如下 <configuration> <property> <name>yarn.nodemanager.res