为什么我必须部署两次才能获取资产管道中的更改?

时间:2012-02-26 00:47:19

标签: ruby-on-rails capistrano asset-pipeline

这是我的(审查)config / deploy.rb: https://gist.github.com/eedf6c976f632c1242cf

出于某种原因,我的资产的任何更改,无论是CoffeeScript还是SASS / SCSS文件,在我第一次部署时都不会出现在生产环境中。当我第二次部署时,资产变更就会生效。这是浪费时间,我不知道为什么会这样。有什么想法吗?

3 个答案:

答案 0 :(得分:1)

我假设您的Capfile看起来像这样:

load 'deploy'
load 'deploy/assets'
load 'config/deploy'

只需交换deploy/assetsconfig/deploy的展示位置即可。所以:

load 'deploy'
load 'config/deploy'
load 'deploy/assets'

答案 1 :(得分:0)

好的,我想出了如何使它工作,但它不干净。出于某种原因,deploy:assets:precompile正在deploy:create_symlink之前运行,而不是之后运行。结果是,在编译资产时,服务器上的current目录尚未指向新代码,因此它们仅针对先前的部署进行编译。这就是我的资产没有更新的原因,除非我部署了两次。

我通过添加以下内容来应用快速修复:

before "deploy:assets:precompile", "deploy:create_symlink"

这会在预编译之前触发创建符号链接,以便拾取资产更改。结果是符号链接创建了两次,因为现有的行为仍然运行。它有效,但感觉很脏。

我真的不确定为什么这首先是一个问题,我不明白为什么其他人似乎没有这个问题;我的deploy.rb非常干脆,没什么太花哨的。我唯一能想到的是load "deploy/assets"不在文件中的正确位置。我只是假设它在顶部,我不知道它是否会影响执行顺序。

任何建议作为解决此问题的正确方法都将非常感谢!

答案 2 :(得分:0)

当我使用这个gem时,我发现了同样的错误。

require "bundler/capistrano"

当我使用下面的宝石时,一切都很好~~

require 'capistrano/ext/multistage'

注意:不要同时使用这两个宝石,或者你可以满足每个宝石覆盖的部署步骤。

根据我的经验,U应该部署,在控制台中查看进程和输出,检测出错误。

也许你之前......以及...之后的命令无效。