Capistrano / Rails 3.2.14 / Sprockets - 未在生产中完成部署
Capistrano / Rails 3.2.14 / Sprockets - not finalizing deploy in production
我正在迁移几年前创建的 Rails 应用程序,并且很长时间没有将其部署到新服务器。当时,我使用 capistrano 没有问题,现在,当我 运行 cap deploy 我得到以下步骤失败:
* executing "ls -1 /home/deploy/mywebsite.com/shared/assets/.sprockets-manifest* | wc -l"
servers: ["45.79.142.32"]
[45.79.142.32] executing command
command finished in 727ms
* executing "ls /home/deploy/mywebsite.com/shared/assets/.sprockets-manifest*"
servers: ["45.79.142.32"]
[45.79.142.32] executing command
command finished in 783ms
*** [deploy:update_code] rolling back
* executing "rm -rf /home/deploy/mywebsite.com/releases/20150812101128; true"
servers: ["45.79.142.32"]
[45.79.142.32] executing command
command finished in 944ms
failed: "rvm_path=/home/deploy/.rvm /home/deploy/.rvm/bin/rvm-shell 'ruby-2.2.2' -c 'ls /home/deploy/mywebsite.com/shared/assets/.sprockets-manifest*'" on 45.79.142.32
我在一些地方读到过 sprockets 更改清单文件名或类型(从 .sprockets-manifest 到 .manifest 或其他),但我不知道如何以它不是的方式解决它'太骇人听闻了。我不确定这是不是因为使用了旧的 Rails 版本或其他原因。这是我使用的版本:
- Ruby 2.2.2
- Rails 3.2.14
- Capistrano 2.15.6(Rvm/capistrano)
- 链轮 2.2.1
解决方案很荒谬。在网上搜索时,我发现 sprockets 正在寻找 .sprockets-manifest.json 文件。哪个不存在(我不知道为什么)。所以我只是在 shared/assets 文件夹中手动创建它:
touch shared/assets/.sprockets-manifest.json
它就像一个魅力。希望这对其他人有帮助。
您的链轮版本可能与此 Gemfile 不同
可以尝试添加bundle exec
前缀使用Gemfile指定版本
我在capistrano 2.15.7源代码中找到了这个
# lib/capistrano/recipes/deploy/assets.rb
_cset(:asset_manifest_prefix) { (`sprockets -v`.chomp < "3.0" ? "manifest" : ".sprockets-manifest") rescue "manifest" }
查看更多What does bundle exec rake mean?
我正在迁移几年前创建的 Rails 应用程序,并且很长时间没有将其部署到新服务器。当时,我使用 capistrano 没有问题,现在,当我 运行 cap deploy 我得到以下步骤失败:
* executing "ls -1 /home/deploy/mywebsite.com/shared/assets/.sprockets-manifest* | wc -l"
servers: ["45.79.142.32"]
[45.79.142.32] executing command
command finished in 727ms
* executing "ls /home/deploy/mywebsite.com/shared/assets/.sprockets-manifest*"
servers: ["45.79.142.32"]
[45.79.142.32] executing command
command finished in 783ms
*** [deploy:update_code] rolling back
* executing "rm -rf /home/deploy/mywebsite.com/releases/20150812101128; true"
servers: ["45.79.142.32"]
[45.79.142.32] executing command
command finished in 944ms
failed: "rvm_path=/home/deploy/.rvm /home/deploy/.rvm/bin/rvm-shell 'ruby-2.2.2' -c 'ls /home/deploy/mywebsite.com/shared/assets/.sprockets-manifest*'" on 45.79.142.32
我在一些地方读到过 sprockets 更改清单文件名或类型(从 .sprockets-manifest 到 .manifest 或其他),但我不知道如何以它不是的方式解决它'太骇人听闻了。我不确定这是不是因为使用了旧的 Rails 版本或其他原因。这是我使用的版本:
- Ruby 2.2.2
- Rails 3.2.14
- Capistrano 2.15.6(Rvm/capistrano)
- 链轮 2.2.1
解决方案很荒谬。在网上搜索时,我发现 sprockets 正在寻找 .sprockets-manifest.json 文件。哪个不存在(我不知道为什么)。所以我只是在 shared/assets 文件夹中手动创建它:
touch shared/assets/.sprockets-manifest.json
它就像一个魅力。希望这对其他人有帮助。
您的链轮版本可能与此 Gemfile 不同
可以尝试添加bundle exec
前缀使用Gemfile指定版本
我在capistrano 2.15.7源代码中找到了这个
# lib/capistrano/recipes/deploy/assets.rb
_cset(:asset_manifest_prefix) { (`sprockets -v`.chomp < "3.0" ? "manifest" : ".sprockets-manifest") rescue "manifest" }
查看更多What does bundle exec rake mean?