使用capistrano 3进行部署时,assets文件夹是在公共场所自动创建的

问题描述 投票:2回答:2

我的应用程序的public(public / assets)目录中没有任何资源文件夹。 当我尝试使用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
ruby-on-rails amazon-web-services capistrano manifest
2个回答
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的辅助方法使用它来避免将映射请求传递回链轮。 典型的清单文件如下所示:

---
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
投票

这是Asset Pipeline的rails默认功能。 阅读本文以获得更好的理解。 资产小人

资产管道提供了一个框架,用于连接和最小化或压缩JavaScript和CSS资产。 它还增加了用其他语言(例如CoffeeScript,Sass和ERB)编写这些资产的功能。

在生产环境中运行Rails应用程序时,会编译应用程序/资产中存在的媒体内容,并将多个文件合并为一个,以更快地加载资产。

您可以检查config / application.rb文件。 config.assets.enabled = true

这将启用资产流水线。

进行资产预编译时,将它们放置在public / assets文件夹中,并且条目在manifest.yml文件中更新。

默认情况下,Rails应用程序将在public / assets文件夹中搜索资产 。 如果未进行任何更改,则不会再次编译资产。 您可以使用: rake assets:precompile来编译资产,或者在重新启动服务器时自动对其进行编译。 必须有一个像node.js或rubyracer这样的js编译器来编译js。

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

© www.soinside.com 2019 - 2024. All rights reserved.