【问题标题】:Capistrano deployment fails after upgrade to Rails 3.2.11升级到 Rails 3.2.11 后 Capistrano 部署失败
【发布时间】:2012-12-25 22:10:26
【问题描述】:

我有用于使用 capistrano 部署的生产 Rails 3.2.3 应用程序。当我决定将 rails 升级到 3.2.11 时,我执行了以下步骤:

  1. 在 Gemfile 中更改了 rails 版本
  2. 运行“bundle update rails”
  3. 从供应商/缓存、Gemfile 和 Gemfile.lock 推送新的 gem
  4. 运行“上限生产部署”

Capistrano 现在失败并出现错误:

  * 2013-01-11 15:58:25 executing `deploy:assets:precompile'
    triggering before callbacks for `deploy:assets:precompile'
  * 2013-01-11 15:58:25 executing `deploy:assets:update_asset_mtimes'
  * executing "[ -e /home/deploy/projects/otv/shared/assets/manifest.yml ] && cat /home/deploy/projects/otv/shared/assets/manifest.yml || echo"
    servers: ["xxx.xxx.99.51"]
    [xxx.xxx.99.51] executing command
    command finished in 28ms
  * executing "cd -- /home/deploy/projects/otv/releases/20130111095812 && export LANG=en_US.UTF-8 && /usr/local/bin/bundle exec rake RAILS_ENV=production RAILS_GROUPS=assets assets:precompile && cp -- /home/deploy/projects/otv/shared/assets/manifest.yml /home/deploy/projects/otv/releases/20130111095812/assets_manifest.yml"
    servers: ["xxx.xxx.99.51"]
    [xxx.xxx.99.51] executing command
 ** [out :: xxx.xxx.99.51] cp: cannot stat ‘/home/deploy/projects/otv/shared/assets/manifest.yml’: No such file or directory
    command finished in 18773ms

我尝试使用其他项目执行这些步骤,该项目以前成功地使用 capistrano 进行部署,结果相同。

我的Gemfile and deploy.rb

【问题讨论】:

    标签: ruby-on-rails-3.2 capistrano


    【解决方案1】:

    您是否在升级之前删除了远程服务器上的所有资产?

    有时一些旧的引用可能会导致这种问题

    干杯, 杰里米

    【讨论】:

    • 我无法理解如何删除我的资产。 ...projectpath/shared/assets 文件夹为空,所有资产位于 ...projectpath/releases/yyyymmddhhmmss/public/assets。另外我不明白如何删除我的 Gemfile.lock,我应该从 repo 中删除它,因为部署代码是从 repo 中获取的?
    • 好吧,将 Gemfile.lock 保存在仓库中并不是一个好习惯,因为它是在执行 bundle(安装、更新..)时自动生成的。例如,您是否尝试在当前版本上直接执行最后一个命令(执行“cd -- /home/deploy/projects/otv/releases/2[....])?!
    • cd -- /home/deploy/projects/otv/releases/20130111080236/ && export LANG=en_US.UTF-8 && /usr/local/bin/bundle exec rake RAILS_ENV=production RAILS_GROUPS=assets assets:precompile && cp -- /home/deploy/projects/otv/shared/assets/manifest.yml /home/deploy/projects/otv/releases/20130111080236/assets_manifest.yml 导致错误“cp: cannot stat '/ home/deploy/projects/otv/shared/assets/manifest.yml':没有这样的文件或目录”。这是正常的,因为在所有版本中,清单文件都位于 public/assets/ 而不是 shared/assets 中
    【解决方案2】:

    我遇到了同样的问题。

    新版本的 capistrano 现在有 some code 来处理共享资产路径符号链接。 我的config/deploy.rb 有一些代码来处理这个问题,并且路径相互冲突。 我刚刚从中删除了这一行来解决问题:

    run "ln -nfs #{shared_path}/public/assets #{release_path}/public/assets"
    

    【讨论】:

      【解决方案3】:

      FWIW,我在将 Capistrano 更新到 > 2.14.0 后得到了这个:

      *** [err :: ourapp.net] cp: cannot stat `/home/deploy/www/ourapp/shared/assets/manifest.yml'
      *** [err :: ourapp.net] : No such file or directory
      

      我认为将资产符号链接到共享目录可以解决问题,但我没有搞砸(必须完成此部署),而是将上限降级回 2.13.5。

      【讨论】:

      • 我正在使用 capistrano 2.14.2 并在升级到 Rails 4.0beta1 后看到同样的问题。有没有不降级的解决方案? - 我不确定我会从哪里对资产进行符号链接?
      • @RomanGaufman 清单文件的名称已更改为manifest-a5247d227d9b50f54f7c66dc7e640bca.json 样式。您只需在/home/deploy/www/ourapp/shared/assets 目录上通过touch 命令创建manifest.yml 即可避免此错误。
      猜你喜欢
      • 1970-01-01
      • 2012-08-15
      • 1970-01-01
      • 2020-03-21
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多