【问题标题】:Do you add public/assets in version control?您是否在版本控制中添加公共/资产?
【发布时间】:2011-09-26 20:40:29
【问题描述】:

在 rails 3.1 中,当您预编译资产时,rails 会创建 public/assets 目录并在其中添加文件。

您是否对 public/assets/* 进行版本控制?

【问题讨论】:

  • 您觉得您的问题得到了解答吗?如果是,请接受,否则对您遗漏的内容发表评论会有所帮助。

标签: ruby-on-rails asset-pipeline


【解决方案1】:

我使用 Capistrano 进行部署。最后一步是编译资产。没有类似的东西被检查到版本控制中。

https://github.com/capistrano/capistrano/wiki/Documentation-v2.x

签入已编译的资产、.gz 文件/等只会弄乱版本控制。

【讨论】:

  • rake assets:precompile 在我的 Amazon EC2 微型实例上为我运行需要 10 分钟。因此部署至少需要 10 分钟。在我的开发盒上,不到一分钟。考虑到这一点,您认为对编译后的资产进行版本控制是否有意义?
  • Railscast episode #341 的末尾,Ryan Bates 提到了在本地机器上编译资产然后修改 capistrano 部署任务以将文件同步到生产服务器的想法;即不要将它们置于版本控制中。听起来不错。
  • 提醒:编译资产后,您的开发环境可能会选择直接提供这些资产,而不是根据需要生成它们。我的一个快速解决方案是在上述cap assets:precompilersync 任务完成后删除/public/assets
  • 所以现在我们的做法略有不同。 EC2 micros 确实需要很长时间才能编译。 CI 服务器构建应用程序、预编译资产和 gem 源的存档,并将其转储到 S3 上。现在,实例在重新启动时从 S3 中提取已经具有资产的最新代码。他们永远不会进入源代码控制。这可能不是最好的方法,但我们现在就是这样做的。
【解决方案2】:

我也在寻找这个问题的答案。我发现官方 Rails 指南对此有一些想法:

http://guides.rubyonrails.org/asset_pipeline.html#local-precompilation

以下是相关部分的引述(强调):

您可能希望在本地预编译资产有几个原因。其中有:

  • 您可能没有生产文件系统的写入权限。
  • 您可能要部署到多个服务器,并希望避免重复工作。
  • 您可能经常进行不包括资产更改的部署。

本地编译允许您将编译后的文件提交到源代码管理中,并正常部署。

有三个注意事项:

  • 您不得运行预编译资产的 Capistrano 部署任务。
  • 您必须确保您的开发系统上有任何必要的压缩器或压缩器。
  • 您必须更改以下应用程序配置设置:

config/environments/development.rb 中,放置以下行:

config.assets.prefix = "/dev-assets"

prefix 更改使 Sprockets 在开发模式下使用不同的 URL 来服务资产,并将所有请求传递给 Sprockets。在生产环境中,前缀仍然设置为/assets。如果没有此更改,应用程序将在开发中提供来自 /assets 的预编译资产,并且在您再次编译资产之前您不会看到任何本地更改。

实际上,这将允许您在本地进行预编译,将这些文件保存在您的工作树中,并在需要时将这些文件提交给源代码控制。开发模式将按预期工作。

因此,有时将预编译的资产放入 VCS 似乎是个好主意。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-06-11
    • 1970-01-01
    • 1970-01-01
    • 2013-07-21
    • 2010-09-30
    • 2012-03-16
    相关资源
    最近更新 更多