我刚为我们的应用程序设置了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
手动创建清单文件,则部署脚本可以正常工作。然而,这感觉各种各样粗略。
我已经用Google搜索了这个,我能收集到的最多的是它正在寻找的清单文件是资产管道的产物。我检查过,事实上,我确实启用了管道(config.assets.enabled = true
),所以我很茫然。
有人可以帮我理解1)这个清单文件是什么以及它是如何创建的; 2)为什么没有为我的申请创建一个?
更新:我想我正在接近答案,我认为这与这一行有关:
config.assets.prefix = "/some_other_path"
我们需要重命名“资产”路径,因为我们的系统中有Asset对象,而且我猜Cap可能因此而感到困惑。有什么建议吗?
答案 0 :(得分:18)
我怀疑是对的:这是重命名的资产目录的问题。 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
变量而不必再次对路径进行硬编码会很方便,但这超出了这个问题的范围。
答案 1 :(得分:0)
如果配置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)}" }
...