【问题标题】:assets folder is automatically created inside of public while deploying with capistrano 3使用 capistrano 3 部署时,会在 public 内部自动创建 assets 文件夹
【发布时间】:2014-02-09 04:51:36
【问题描述】:

我的应用程序的公共(公共/资产)目录中没有任何资产文件夹。当我尝试使用 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).

////这个错误在trace的末尾

** 调用 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

【问题讨论】:

    标签: ruby-on-rails amazon-web-services capistrano manifest


    【解决方案1】:

    看起来,您的应用程序中可能使用的是 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 辅助方法使用它来避免将映射请求返回给 Sprocket。典型的清单文件如下所示:

    ---
    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 更改)附带:require 'capistrano/deploy' 在 Capfile 中。因此,您不必为部署编写自己的 precompile_assets 任务。

    看看这个答案:https://stackoverflow.com/a/15690628/645886,还有这个:http://blog.blenderbox.com/2013/11/06/precompiling-assets-with-capistrano-3-0-1/。我希望这有帮助。

    【讨论】:

    • @Surya- 你的内容非常有用。谢谢。当我运行 rake assets:precompile 时,会生成一个清单文件夹。但是当我运行 cap development deploy --trace 时,我又遇到了同样的错误。更新了我的问题中的错误。我正在从本地环境部署到 ec2 开发环境。
    【解决方案2】:

    这是 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 应用默认会搜索 public/assets 文件夹中的资产。如果未进行任何更改,则不会再次编译资产。 您可以使用:rake assets:precompile 编译资产,或者当您重新启动服务器时,它会自动编译。必须有一个像 node.js 或 ruby​​racer 这样的 js 编译器来编译 js。

    如果您想避免编译,请从 application.rb 禁用它并为生产环境提供资产路径。在开发模式下,资产由 app/assets 提供。也可以尝试运行rake assets:precompile,查看是否创建了public下的assets文件夹。

    【讨论】:

    • @GhostRider- 你的内容非常有用。谢谢。当我运行 rake assets:precompile 时,会生成一个清单文件夹。但是当我运行 cap development deploy --trace 时,我又遇到了同样的错误。更新了我的问题中的错误。我正在从本地环境部署到 ec2 开发环境。
    猜你喜欢
    • 2015-01-23
    • 1970-01-01
    • 2014-01-24
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-06-02
    相关资源
    最近更新 更多