Capistrano 3 + Sprockets 3 + Rails 4.2.1 不会部署?
Capistrano 3 + Sprockets 3 + Rails 4.2.1 won't deploy?
我 运行 bundle update
并将 sprockets
更新为 3.0.0.
当我尝试通过 Capist运行o 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
我四处寻找可能有同样问题的人,似乎没有任何问题或评论...
老实说,我什至不确定 sprockets
、sprockets-rails
与 rails 有何关系。这让我很困惑......例如,默认的 Gemfile
附带一个新的 Rails 4.2.1
应用程序说 Gemfile.lock
允许 sprockets 3.0.0,但是当你去链轮 2->3 升级指南,它显示 //= include
已被删除,但它就在 application.js
文件中。
所以,也许我遗漏了什么,但我不太确定如何解决这个问题。
这个问题很容易解决,但我认为首先我们应该解决其他一些问题。
sprockets
是一个 ruby 库,可自动管理 Web 前端资产(CSS、JS、图像等)。
它基于在开发中保持您的资产文件逻辑组织,然后在部署之前链接和缩小它们的想法生产。 Sprockets 使这个过程自动化。
Rails 3.1(很久以前,现在)发布了一个名为 "Asset Pipeline" 的新功能,可以自动管理 Web 资产。 Rails' Asset Pipeline 过去和现在都由 sprockets
提供支持。
sprockets
和 rails
都是积极维护和开发的库。发布了具有新功能和重大更改的新版本。
我相信 Rails 默认情况下不使用最新版本的 sprockets
。没关系,我们这里说的是编译CSS和JS,而不是和一些外部交互API;即使是旧版本的 sprockets
也能胜任。
这意味着更新 sprockets
不是一个好主意。 Rails 的每个版本都声明了 sprockets
的特定(最小-最大)版本,这是有充分理由的:这是当前资产管道所依赖的版本。更新它可能会破坏事情。
然后,让我们转到清单文件。
默认情况下,在 预编译 资产(解析引用,包括一些文件到其他文件,链接和缩小它们)之后,编译的资产被复制到 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.json
或 manifest.yml
,具体取决于 Rails.
的版本
此外,stat
意味着 capistrano
正在尝试从文件中获取一些信息,可能是为了弄清楚它是最近的。
问题是文件不存在。
您应该 precompile the assets,然后 提交生成的文件 并再次尝试部署。
如果您正在使用 capistrano-rails
,请尝试更新至 1.1.3
。这已经解决了我的问题。
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
根据评论,我通过从 1.1.2 -> 1.1.3
升级 capistrano-rails 来解决这个问题
# Gemfile
'capistrano-rails', '~> 1.1.3'
我 运行 bundle update
并将 sprockets
更新为 3.0.0.
当我尝试通过 Capist运行o 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
我四处寻找可能有同样问题的人,似乎没有任何问题或评论...
老实说,我什至不确定 sprockets
、sprockets-rails
与 rails 有何关系。这让我很困惑......例如,默认的 Gemfile
附带一个新的 Rails 4.2.1
应用程序说 Gemfile.lock
允许 sprockets 3.0.0,但是当你去链轮 2->3 升级指南,它显示 //= include
已被删除,但它就在 application.js
文件中。
所以,也许我遗漏了什么,但我不太确定如何解决这个问题。
这个问题很容易解决,但我认为首先我们应该解决其他一些问题。
sprockets
是一个 ruby 库,可自动管理 Web 前端资产(CSS、JS、图像等)。
它基于在开发中保持您的资产文件逻辑组织,然后在部署之前链接和缩小它们的想法生产。 Sprockets 使这个过程自动化。
Rails 3.1(很久以前,现在)发布了一个名为 "Asset Pipeline" 的新功能,可以自动管理 Web 资产。 Rails' Asset Pipeline 过去和现在都由 sprockets
提供支持。
sprockets
和 rails
都是积极维护和开发的库。发布了具有新功能和重大更改的新版本。
我相信 Rails 默认情况下不使用最新版本的 sprockets
。没关系,我们这里说的是编译CSS和JS,而不是和一些外部交互API;即使是旧版本的 sprockets
也能胜任。
这意味着更新 sprockets
不是一个好主意。 Rails 的每个版本都声明了 sprockets
的特定(最小-最大)版本,这是有充分理由的:这是当前资产管道所依赖的版本。更新它可能会破坏事情。
然后,让我们转到清单文件。
默认情况下,在 预编译 资产(解析引用,包括一些文件到其他文件,链接和缩小它们)之后,编译的资产被复制到 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.json
或 manifest.yml
,具体取决于 Rails.
的版本
此外,stat
意味着 capistrano
正在尝试从文件中获取一些信息,可能是为了弄清楚它是最近的。
问题是文件不存在。
您应该 precompile the assets,然后 提交生成的文件 并再次尝试部署。
如果您正在使用 capistrano-rails
,请尝试更新至 1.1.3
。这已经解决了我的问题。
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
根据评论,我通过从 1.1.2 -> 1.1.3
# Gemfile
'capistrano-rails', '~> 1.1.3'