是否可以编译 Symfony2assetic:dump 并部署它而不是在服务器上运行它?

Posted

技术标签:

【中文标题】是否可以编译 Symfony2assetic:dump 并部署它而不是在服务器上运行它?【英文标题】:Is it possible to compile Symfony2 assetic:dump and deploy that rather than run it on the server? 【发布时间】:2012-08-29 00:24:59 【问题描述】:

我的生产服务器出现问题,assetic:dump 在 Capifony 部署中超时(但并非总是如此)。

在本地运行assetic:dump 很好。也可以部署到不同的暂存(功能要弱得多)服务器。

为了解决这个问题(并加快部署速度),我想知道是否可以在部署之前运行 assetic:dump 并将这些编译好的资产与部署的其余部分一起发送?

【问题讨论】:

你试过我的解决方案了吗?我相信这是我对 S.O. 的最大贡献,所以如果它有效,我会很高兴被接受 :-) 【参考方案1】:

这有点棘手,我也在尝试这样做(java 在我的服务器上无法正常工作,因此部署失败)。

问题在于 Capifony 从源代码控制存储库进行部署,并且通常转储的资产不在存储库中(它们不应该)。

所以我想这样做的唯一方法是创建一个 Capistrano 任务(Capifony 基于 Capistrano),它将转储资产并在服务器上同步它们。

编辑:这是我的尝试 编辑:它确实有效,自从我回答问题以来我一直在使用它。

我确信有很多可能的改进,我不是 ruby​​ 专家,我也不是 shell 脚本专家。

在您的 deploy.rb 中,您可以添加两个任务:

before "deploy:update_code", "deploy:dump_assetic_locally"
after "deploy:update_code", "deploy:rsync_local_assets_to_server"

以及与这些任务相关的代码(在同一个文件中):

namespace :deploy do
  task :dump_assetic_locally, :roles => :web do
    run_locally "php app/console assetic:dump --env=prod"
  end

  task :rsync_local_assets_to_server, :roles => :web do
    finder_options = :except =>  :no_release => true 
    find_servers(finder_options).each |s| run_locally "rsync -az --delete --rsh='ssh -p #ssh_port(s)' #local_web_path/js/ #rsync_host(s):#release_path/web/js/" 
    find_servers(finder_options).each |s| run_locally "rsync -az --delete --rsh='ssh -p #ssh_port(s)' #local_web_path/css/ #rsync_host(s):#release_path/web/css/" 
  end

  def local_web_path
    File.expand_path("web")
  end

  def rsync_host(server)
    :user ? "#user@#server.host" : server.host
  end

  def ssh_port(server)
    server.port || ssh_options[:port] || 22
  end

end

【讨论】:

【参考方案2】:

命令assetic:dump 从当前环境中可用的所有捆绑包中获取资产,并将它们放置在web/bundles(或您告诉它的位置)中。在本地执行此操作然后移动文件应该没有问题。

您应该使用env=prod 选项运行该命令,以确保生成生产中所需的所有捆绑包。您可能还想在运行命令之前清理web/bundles,以便仅在开发中使用的捆绑包的资产(例如分析器)不存在。

我只需在本地运行命令进行测试,从生产中下载资产并进行比较。我现在想不出任何东西,因为 css 和 js 被提供给客户端,并且在不同的机器上生成时不应该有所不同,但我可能错了。

【讨论】:

【参考方案3】:

很简单 添加到您的deploy.rb

set :dump_assetic_assets, true

【讨论】:

以上是关于是否可以编译 Symfony2assetic:dump 并部署它而不是在服务器上运行它?的主要内容,如果未能解决你的问题,请参考以下文章

是否可以设置反编译代码的TFS任务?

是否可以先编译最近更改的文件?

是否可以使用 GCC 编译具有特定编译器标志的代码文件的一部分?

是否可以并行编译单个 C++ 翻译单元?

是否可以在编译时评估数组?

是否可以在没有编译失败的情况下推断类型是否不完整? [复制]