【发布时间】:2011-09-26 20:40:29
【问题描述】:
在 rails 3.1 中,当您预编译资产时,rails 会创建 public/assets 目录并在其中添加文件。
您是否对 public/assets/* 进行版本控制?
【问题讨论】:
-
您觉得您的问题得到了解答吗?如果是,请接受,否则对您遗漏的内容发表评论会有所帮助。
标签: ruby-on-rails asset-pipeline
在 rails 3.1 中,当您预编译资产时,rails 会创建 public/assets 目录并在其中添加文件。
您是否对 public/assets/* 进行版本控制?
【问题讨论】:
标签: ruby-on-rails asset-pipeline
我使用 Capistrano 进行部署。最后一步是编译资产。没有类似的东西被检查到版本控制中。
https://github.com/capistrano/capistrano/wiki/Documentation-v2.x
签入已编译的资产、.gz 文件/等只会弄乱版本控制。
【讨论】:
rake assets:precompile 在我的 Amazon EC2 微型实例上为我运行需要 10 分钟。因此部署至少需要 10 分钟。在我的开发盒上,不到一分钟。考虑到这一点,您认为对编译后的资产进行版本控制是否有意义?
cap assets:precompile 和rsync 任务完成后删除/public/assets。
我也在寻找这个问题的答案。我发现官方 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 似乎是个好主意。
【讨论】: