我的应用程序的公共(公共/资产)目录中没有任何资源文件夹。当我尝试使用capistrano v3进行部署时。在我的远程计算机中创建一个名为public / assets的新文件夹。我也收到以下错误,因为它在public / assets(public / assets / manifest *)下搜索名为manifest.yml的文件。有必要吗??这是什么目的???
//getting the following error while deploying
DEBUG [014a40e4] Running /usr/bin/env [ -L /home/ec2-user/capistrano-3/my_app/releases/20140117124107/public/assets ] on 50.13.220.55
DEBUG [014a40e4] Command: [ -L /home/ec2-user/capistrano-3/my_app/releases/20140117124107/public/assets ]
DEBUG [014a40e4] Finished in 0.602 seconds with exit status 1 (failed).
DEBUG [9c5901ab] Running /usr/bin/env [ -d /home/ec2-user/capistrano-3/my_app/releases/20140117124107/public/assets ] on 50.13.220.55
DEBUG [9c5901ab] Command: [ -d /home/ec2-user/capistrano-3/my_app/releases/20140117124107/public/assets ]
DEBUG [9c5901ab] Finished in 0.639 seconds with exit status 1 (failed).
////此错误位于跟踪结束
**调用deploy:assets:backup_manifest(first_time)
**执行deploy:assets:backup_manifest
DEBUG [a08f4c02] cp:
DEBUG [a08f4c02] cannot stat `/home/ec2-user/capistrano-3/my_app/releases/20140117064709/public/assets/manifest*'
DEBUG [a08f4c02] : No such file or directory
DEBUG [a08f4c02]
cap aborted!
cp stdout: Nothing written
cp stderr: Nothing written
Tasks: TOP => deploy:assets:backup_manifest
The deploy has failed with an error: #<SSHKit::Command::Failed: cp stdout: Nothing written
cp stderr: Nothing written
>
** Invoke deploy:failed (first_time)
** Execute deploy:failed
答案 0 :(得分:3)
看起来,您可能在应用程序中使用3.1或更高版本的rails。
基本上,从指南:
资产管道提供了连接和缩小的框架 压缩JavaScript和CSS资产。它还增加了写作能力 这些资产使用其他语言,如CoffeeScript,Sass和ERB。
以下是您需要了解的所有信息:http://guides.rubyonrails.org/asset_pipeline.html
如指南中所述,您可以通过在 config / application.rb 文件中添加/修改以下代码来禁用它:
config.assets.enabled = false
如果您继续使用资产管道,则可以使用以下命令预编译资产:
rake assets:precompile
# or
rake assets:precompile:all
关于menifest.yml(来自指南本身):
rake任务还会生成一个manifest.yml,其中包含一个包含所有资产及其各自指纹的列表。 Rails帮助程序方法使用它来避免将映射请求交还给Sprockets。典型的清单文件如下所示:
---
rails.png: rails-bd9ad5a560b5a3a7be0808c5cd76a798.png
jquery-ui.min.js: jquery-ui-7e33882a28fc84ad0e0e47e46cbf901c.min.js
jquery.min.js: jquery-8a50feed8d29566738ad005e19fe1c2d.min.js
application.js: application-3fdab497b8fb70d20cfc5495239dfc29.js
application.css: application-8af74128f904600e41a6e39241464e03.css
所以,当你运行rake任务时。它将生成menifest.yml文件,其中包含您的资产条目,包括md5哈希摘要,用于在客户端级别缓存您的资产。每次运行rake任务时,您都会获得资产的新哈希值。当浏览器收到服务器的响应时,会验证/使资产无效。
我鼓励您使用资产管道,因为它还可以让您以更好/更简单的方式使用CDN。但是,在一天结束时,这是你的选择。
<强>更新强>
对于在capistrano 3中部署(因为capistrano 3有很多DSL更改),在Capfile中附带:require 'capistrano/deploy'
。因此,您不必为部署编写自己的precompile_assets任务。
请看一下这个答案:https://stackoverflow.com/a/15690628/645886,以及:http://blog.blenderbox.com/2013/11/06/precompiling-assets-with-capistrano-3-0-1/。我希望这有帮助。
答案 1 :(得分:1)
这是Asset Pipeline的rails默认功能。阅读本文以便更好地理解。 Asset Pipleine
资产管道提供了连接和缩小或压缩的框架 JavaScript和CSS资产。它还增加了编写这些资产的能力 其他语言,如CoffeeScript,Sass和ERB。
在生产环境中运行rails应用程序时,将编译app / assets中存在的媒体内容,并将多个文件连接成一个文件,以便更快地加载资产。
您可以查看config / application.rb文件。config.assets.enabled = true
这可以启用资产管道。
当资产预编译发生时,它们被放入public / assets文件夹,并且该条目在manifest.yml文件中更新。
Rails应用默认搜索公共/资源文件夹中的资源。如果未进行任何更改,则不会再次编译资产。
您可以使用:rake assets:precompile
编译资产,也可以在重新启动服务器时自动编译。必须有一个js编译器,如node.js或rubyracer来编译js。
如果您想避免编译,请从application.rb中禁用它,并为生产环境提供资产的路径。在开发模式中,资产由app / assets提供。您还可以尝试运行rake assets:precompile
并检查是否已创建公共资源文件夹。