我在Kubernetes上部署了一个Rails。目前,应用程序预加载时间很长(大约一分钟),我正在寻找减少这段时间的方法。
我发现的一个解决方案是一个名为bootsnap
的gem来缓存一些重要文件,因此每次启动时这些文件都已加载,预加载的增益大约为50%
只有当我们重新启动服务器并且使用Kubernetes我们总是创建一个新的Pod时,它才会起作用,因此没有缓存,并且使用bootsnap
没有任何好处。
要创建此缓存,我只需要运行rails server
所以我认为我可以做的就是在我的Dockerfile中添加一个命令来启动Rails,然后,如果成功,则杀死它,因为在那时,文件已缓存,我的图像将包含这些文件
我有什么方法可以做像
这样的事情RUN rails server --daemon
RUN until port 3000 is not up wait
RUN kill server
答案 0 :(得分:1)
我认为它适用于
#!/bin/sh
bundle exec rails server --daemon
while ! nc -z localhost 3000; do
echo "Checking for Rails"
sleep 0.5
done
kill $(cat tmp/pids/server.pid)
答案 1 :(得分:0)
你应该能够做到这一点。将这3行(已开发)添加到Dockerfile并进行测试。