【问题标题】:Capistrano deploy slow due to assets - .sprockets-manifest*Capistrano 由于资产而部署缓慢 - .sprockets-manifest*
【发布时间】:2016-02-24 01:44:21
【问题描述】:

在部署我们的 API(根本不使用资产)时,它在这一行挂了大约 5 分钟:

DEBUG [985661f8]    cannot access /var/www/api.staging/releases/20160208111413/public/assets/.sprockets-manifest*
DEBUG [985661f8]    : No such file or directory

我们已经在 config/application.rb 中禁用了资产:

config.assets.enabled = false

还需要做什么?我们正在使用这些版本:

  • capistrano (3.4.0)
  • capistrano 捆绑器 (1.1.4)
  • capistrano-rails (1.1.3)
  • capistrano-rails-collection (0.0.3)

Capistrano 日志:

INFO [42c93c96] Running /usr/local/rvm/bin/rvm 2.1.0@appyapi.staging do bundle exec rake assets:precompile as deploy@139.162.4.97
DEBUG [42c93c96] Command: cd /var/www/appyapi.staging/releases/20160223041856 && ( RAILS_ENV=staging /usr/local/rvm/bin/rvm 2.1.0@appyapi.staging do bundle exec rake assets:precompile )
INFO [42c93c96] Finished in 279.004 seconds with exit status 0 (successful).
DEBUG [f2410fde] Running /usr/bin/env if test ! -d /var/www/appyapi.staging/releases/20160223041856; then echo "Directory does not exist '/var/www/appyapi.staging/releases/20160223041856'" 1>&2; false; fi as deploy@139.162.4.97
DEBUG [f2410fde] Command: if test ! -d /var/www/appyapi.staging/releases/20160223041856; then echo "Directory does not exist '/var/www/appyapi.staging/releases/20160223041856'" 1>&2; false; fi
DEBUG [f2410fde] Finished in 0.081 seconds with exit status 0 (successful).
INFO [fd9b639a] Running /usr/bin/env mkdir -p /var/www/appyapi.staging/releases/20160223041856/assets_manifest_backup as deploy@139.162.4.97
DEBUG [fd9b639a] Command: cd /var/www/appyapi.staging/releases/20160223041856 && /usr/bin/env mkdir -p /var/www/appyapi.staging/releases/20160223041856/assets_manifest_backup
INFO [fd9b639a] Finished in 0.078 seconds with exit status 0 (successful).
DEBUG [462a5734] Running /usr/bin/env ls /var/www/appyapi.staging/releases/20160223041856/public/assets/.sprockets-manifest* as deploy@139.162.4.97
DEBUG [462a5734] Command: cd /var/www/appyapi.staging/releases/20160223041856 && /usr/bin/env ls /var/www/appyapi.staging/releases/20160223041856/public/assets/.sprockets-manifest*
DEBUG [462a5734]    ls: cannot access /var/www/appyapi.staging/releases/20160223041856/public/assets/.sprockets-manifest*
DEBUG [462a5734]    : No such file or directory
DEBUG [462a5734] Finished in 0.079 seconds with exit status 2 (failed).

【问题讨论】:

  • 你能包含更多的日志输出吗? Capistrano 应该在执行之前打印每个命令的命令行字符串。在不知道具体命令是什么的情况下,很难排除特定命令运行缓慢的原因。
  • @MattBrictson:我用更多的日志输出更新了我的问题。

标签: ruby-on-rails capistrano


【解决方案1】:

好的,首先重要的是要知道“没有这样的文件或目录”错误是良性的。 Capistrano 执行某些命令作为测试,并根据结果采用不同的代码路径,其中一些测试导致失败是完全正常的。除非 Capistrano 引发异常,否则您可以放心地忽略这些“错误”。

其次,rake assets:precompile 似乎正在运行,即使您没有使用资产管道,因此也没有使用它。如果您没有任何资产,我很惊讶这一步可能需要这么长时间,但让我们再讨论一下吧。

快速解决方案是不包括 capistrano-rails 插件的资产管道步骤。正如README 中所述,您可以通过仅包含您需要的步骤来完成此操作。

所以:

# Put these in your Capfile
require "capistrano/bundler"
require "capistrano/rails/migrations"

# REMOVE these lines so that asset pipeline steps are excluded
# require "capistrano/rails"
# require "capistrano/rails/assets"

【讨论】:

  • 我一直在努力让它发挥作用。尽管没有在我的 Capfile 中注释掉资产步骤,capistrano 仍在尝试预编译资产(我使用的是 Rails 5 api 应用程序)。
  • 您是否确定您的 Capfile 中不需要“capistrano/rails”或“capistrano/rails/assets”?
  • 哦! capistrano/rails 下有哪些任务?
  • 当你加载 capistrano/rails 时,你会得到所有的行为,包括资产。这在README 中有明确说明。
  • 哦,好的。非常感谢您的帮助。
猜你喜欢
  • 2013-11-04
  • 1970-01-01
  • 2015-11-05
  • 1970-01-01
  • 1970-01-01
  • 2023-04-06
  • 1970-01-01
  • 2014-02-05
  • 1970-01-01
相关资源
最近更新 更多