【问题标题】:Capistrano 3 + Sprockets 3 + Rails 4.2.1 won't deploy?Capistrano 3 + Sprockets 3 + Rails 4.2.1 不会部署?
【发布时间】:2015-04-14 00:30:20
【问题描述】:

我运行 bundle update 并将 sprockets 更新为 3.0.0。

当我尝试通过 Capistrano 3 进行部署时,出现以下错误:

INFO [e54ac5ca] Running /usr/bin/env cp /var/www/testapp/releases/20150414002210/public/assets/manifest* /var/www/testapp/releases/20150414002210/assets_manifest_backup as deploy@xx.xxx.xxx.xx
DEBUG [e54ac5ca] Command: cd /var/www/testapp/releases/20150414002210 && /usr/bin/env cp /var/www/testapp/releases/20150414002210/public/assets/manifest* /var/www/testapp/releases/20150414002210/assets_manifest_backup
DEBUG [e54ac5ca]    cp: cannot stat ‘/var/www/testapp/releases/20150414002210/public/assets/manifest*’
DEBUG [e54ac5ca]    : No such file or directory
DEBUG [d2c5a990]    cp: cannot stat ‘/var/www/testapp/releases/20150414002210/public/assets/manifest*’
DEBUG [d2c5a990]    : No such file or directory
cap aborted!
SSHKit::Runner::ExecuteError: Exception while executing as deploy@xx.xxx.xxx.xxx: cp exit status: 1
cp stdout: Nothing written
cp stderr: cp: cannot stat ‘/var/www/testapp/releases/20150414002210/public/assets/manifest*’: No such file or directory
/Users/HomeHome/.rvm/gems/ruby-2.1.3/gems/sshkit-1.7.1/lib/sshkit/runners/parallel.rb:16:in `rescue in block (2 levels) in execute'
/Users/HomeHome/.rvm/gems/ruby-2.1.3/gems/sshkit-1.7.1/lib/sshkit/runners/parallel.rb:12:in `block (2 levels) in execute'
SSHKit::Command::Failed: cp exit status: 1
cp stdout: Nothing written
cp stderr: cp: cannot stat ‘/var/www/testapp/releases/20150414002210/public/assets/manifest*’: No such file or directory
/Users/HomeHome/.rvm/gems/ruby-2.1.3/gems/sshkit-1.7.1/lib/sshkit/command.rb:95:in `exit_status='
/Users/HomeHome/.rvm/gems/ruby-2.1.3/gems/sshkit-1.7.1/lib/sshkit/backends/netssh.rb:179:in `block in _execute'
/Users/HomeHome/.rvm/gems/ruby-2.1.3/gems/sshkit-1.7.1/lib/sshkit/backends/netssh.rb:133:in `tap'
/Users/HomeHome/.rvm/gems/ruby-2.1.3/gems/sshkit-1.7.1/lib/sshkit/backends/netssh.rb:133:in `_execute'
/Users/HomeHome/.rvm/gems/ruby-2.1.3/gems/sshkit-1.7.1/lib/sshkit/backends/netssh.rb:66:in `execute'
/Users/HomeHome/.rvm/gems/ruby-2.1.3/gems/capistrano-rails-1.1.2/lib/capistrano/tasks/assets.rake:68:in `block (5 levels) in <top (required)>'
/Users/HomeHome/.rvm/gems/ruby-2.1.3/gems/sshkit-1.7.1/lib/sshkit/backends/abstract.rb:77:in `within'
/Users/HomeHome/.rvm/gems/ruby-2.1.3/gems/capistrano-rails-1.1.2/lib/capistrano/tasks/assets.rake:67:in `block (4 levels) in <top (required)>'
/Users/HomeHome/.rvm/gems/ruby-2.1.3/gems/sshkit-1.7.1/lib/sshkit/backends/netssh.rb:54:in `instance_exec'
/Users/HomeHome/.rvm/gems/ruby-2.1.3/gems/sshkit-1.7.1/lib/sshkit/backends/netssh.rb:54:in `run'
/Users/HomeHome/.rvm/gems/ruby-2.1.3/gems/sshkit-1.7.1/lib/sshkit/runners/parallel.rb:13:in `block (2 levels) in execute'
Tasks: TOP => deploy:assets:backup_manifest
(See full trace by running task with --trace)
The deploy has failed with an error: #<SSHKit::Runner::ExecuteError: Exception while executing as deploy@xx.xxx.xxx.xxx: cp exit status: 1
cp stdout: Nothing written
cp stderr: cp: cannot stat ‘/var/www/testapp/releases/20150414002210/public/assets/manifest*’: No such file or directory

我四处寻找可能有相同问题的人,似乎没有任何问题或 cmet...

老实说,我什至不确定sprocketssprockets-rails 与 Rails 有什么关系。这让我很困惑......例如,默认的Gemfile 带有一个新的Rails 4.2.1 应用程序说Gemfile.lock 允许使用sprockets 3.0.0,但是当你去sprockets 2-> 3 升级时指南,它显示//= include 已被删除,但它就在application.js 文件中。

所以,也许我遗漏了一些东西,但我不太确定如何解决这个问题。

【问题讨论】:

    标签: ruby-on-rails ruby ruby-on-rails-4 capistrano capistrano3


    【解决方案1】:

    如果您使用的是capistrano-rails,请尝试更新为1.1.3。这已经为我解决了这个问题。

    capistrano-rails CHANGELOG:

    1.1.3 (Apr 18 2015)
    - Fixed no_release behaviour (https://github.com/capistrano/rails/pull/95)
    - Allow assets manifest backup with folder "manifests" (https://github.com/capistrano/rails/pull/92)
    - Handle Sprocket 3 manifest filename
    

    【讨论】:

    • 非常感谢!!!对于像我这样的其他傻瓜-直接在 gemfile 设置版本中 gem 'capistrano-rails', '~> 1.1.3'
    【解决方案2】:

    这个问题很容易解决,但我认为首先我们应该解决其他一些问题。

    sprockets 是一个 ruby​​ 库,可自动管理 Web 前端资产(CSS、JS、图像等)。

    它基于在开发中保持资产文件逻辑组织,然后在部署到生产之前链接和缩小它们的想法。 Sprockets 使这个过程自动化。

    Rails 3.1(很久以前,现在)发布了一个名为“Asset Pipeline”的新功能,可以自动管理 Web 资产。 Rails 的资产管道过去和现在都由sprockets 提供支持。

    sprocketsrails 都是积极维护和开发的库。新版本发布时包含新功能和重大更改。
    我相信 Rails 默认不使用最新版本的sprockets。没关系,我们这里说的是编译 CSS 和 JS,而不是和一些外部 API 交互;即使是旧版本的 sprockets 也可以完成这项工作。
    这意味着更新sprockets 不是一个好主意。每个版本的 Rails 都声明了一个特定的(最小-最大)版本 sprockets,这是有充分理由的:它是当前 Asset Pipeline 所依赖的版本。更新它可能会破坏事情。

    然后,让我们转到清单文件。
    默认情况下,在预编译资产(解析引用,包括一些文件到其他文件,链接和缩小它们)之后,编译的资产被复制到RAILS_ROOT/public/assets。有了它们,Rails 会生成一个 manifest 文件,其中包含所有预编译资产的列表。在您的 Rails 版本中,它应该是 manifest.json,但它曾经是 manifest.yml

    现在,拼图的最后一块是capistrano,我想您知道如何使用它。

    行:

    cp: cannot stat ‘/var/www/testapp/releases/20150414002210/public/assets/manifest*’
    

    表示capistrano 试图在您的RAILS_ROOT/public/assets 目录中查找manifest 文件。存在通配符是因为它可能是 manifest.jsonmanifest.yml,具体取决于 Rails 的版本。
    此外,stat 表示capistrano 正在尝试从文件中获取一些信息,可能是为了弄清楚它有多新。

    问题是文件不存在。
    您应该precompile the assets,然后提交生成的文件并再次尝试部署。

    【讨论】:

    • 其实你不需要在本地预编译资产然后提交到存储库。这是一个错误,capistrano-rails 的人正在努力解决它:github.com/capistrano/rails/pull/112 & github.com/capistrano/rails/issues/111 无论如何,为如此详细的答案竖起大拇指!
    • 哦,很好的信息,谢谢。使用 capistrano 进行部署时,我总是更喜欢使用 deploy 分支 的部署策略,这样“已编译的资产提交”就不会污染您的 master。此外,您通常会部署到服务器集群,我发现在您部署到的每台服务器上一次又一次地编译它们效率低下。此外,在本地预编译它们可以更轻松地自动(在 cap 部署任务中)将它们上传到 CDN。
    • 扩展@mid 的评论,发生的事情是 sprocket 3.0.0 introduced a change 将清单文件从 manifest.json 重命名为 .sprockets-manifest.json。我们正在更新 capistrano-rails 以检查两个文件名并使用它找到的任何一个。
    • @IsaacBetesh 感谢您提供这些信息。我一直在琢磨为什么 manifest.json 没有被创建,并且没想到要通过ls -a 来查看新的隐藏文件!
    • 一个简单的bundle update 将导轨从 4.2.3 提升到 4.2.4,将 capistrano 从 3.2.1 提升到 3.4.0,将 capistrano-rails 从 1.1.2 提升到 1.1.3我。
    【解决方案3】:

    根据评论,我通过从 1.1.2 -&gt; 1.1.3 升级 capistrano-rails 解决了这个问题

    # Gemfile
    'capistrano-rails', '~> 1.1.3'
    

    【讨论】:

      猜你喜欢
      • 2015-03-07
      • 1970-01-01
      • 2011-06-08
      • 1970-01-01
      • 1970-01-01
      • 2015-07-22
      • 1970-01-01
      • 2015-01-17
      • 2014-02-24
      相关资源
      最近更新 更多