使用资产前缀时,由于缺少清单文件,Capistrano部署失败

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了使用资产前缀时,由于缺少清单文件,Capistrano部署失败相关的知识,希望对你有一定的参考价值。

我刚刚为我们的应用程序设置了Capistrano部署,并且我一直遇到这个错误:

  * executing ["ls /path/to/app/shared/assets/manifest*"]
    servers: ["web03"]
    [web03] executing command
[err :: web03] ls: /path/to/app/shared/assets/manifest*
[err :: web03] : No such file or directory

如果我使用touch /path/to/app/shared/assets/manifest.yml手动创建清单文件,则部署脚本可以正常工作。然而,这感觉各种各样的粗略。

我已经用谷歌搜索了这个,我能收集到的最多的是它正在寻找的清单文件是资产管道的产物。我检查过,事实上,我确实启用了管道(config.assets.enabled = true),所以我很茫然。

有人可以帮我理解1)这个清单文件是什么以及它是如何创建的; 2)为什么没有为我的应用程序创建一个?

更新:我想我正在接近答案,我认为这与这一行有关:

config.assets.prefix = "/some_other_path"

我们需要重命名“资产”路径,因为我们的系统中有Asset对象,而且我猜Cap可能会因为它而感到困惑。有什么建议?

答案

我的怀疑是正确的:这是重命名的资产目录的一个问题。盖帽不知道在public/some_other_path而不是public/assets

换句话说,因为这条线在我的application.rb中:

config.assets.prefix = "some_other_path"

我不得不将此行添加到我的deploy.rb

set :assets_prefix, "some_other_path"

然后,Cap知道在哪里寻找清单,将其复制到shared/assets,并正确完成。

deploy.rb引用config变量而不是必须第二次对路径进行硬编码是很方便的,但这超出了这个问题的范围。

另一答案

如果配置aws,这里应该是......

appname/config/environments/production.rb

config.action_controller.asset_host = "//#{ENV['FOG_DIRECTORY']}.s3.amazonaws.com"
config.assets.prefix = "/#{ENV['APP_NAME']}/assets"

appname/config/deploy.rb

...
set :keep_releases, 5
set :assets_prefix, ->{ "#{fetch(:application)}/assets" }

set :whenever_identifier, -> { "#{fetch(:application)}_#{fetch(:stage)}" }
...

以上是关于使用资产前缀时,由于缺少清单文件,Capistrano部署失败的主要内容,如果未能解决你的问题,请参考以下文章

打开 zip 文件或缺少 JAR 清单时出错:build/tmp/expandedArchives/org.jacoco.agent

预编译heroku后生产中缺少Rails资产

缺少 Java 清单属性

Django ValueError:缺少静态文件清单条目,但清单似乎显示了该条目

ValueError:缺少“favicon.ico”的静态文件清单条目

ValueError:缺少“favicon.png”的静态文件清单条目