想在heroku上使用我的rails应用程序使用亚马逊的一切都可以(资产,数据库,上传) .
资产最让我烦恼... Heroku帮助文件说创建一个桶来将文件转储到引用中:http://s3.amazonaws.com/bucketname/filename . 这为我提供了两种开发选择(我能想到):
-
我可以让.gitignore不要查看本地开发的资产,并确保在擦除所有引用或编写帮助后将这些文件上传到我的AWS桶中?
-
始终将所有东西存放在我的桶中,并在本地开发期间被迫拨打我的桶 .
我想知道我是否可以配置这个以便在本地我可以将app资产存储在app / assets文件夹中,并在推送/部署到heroku时自动将资产推送到亚马逊?
这是我的第一个带有亚马逊的heroku rails应用程序,所以请随意侮辱我应该如何配置这些东西以及正确的工作流程 .
谢谢 .
2 回答
试试asset_sync gem . 这使您可以完全按照自己的意愿执行操作:在本地使用资产管道,然后在推送到Heroku后从S3(可选择通过Cloudfront)提供资产 .
请注意,Heroku的编译步骤通常不提供对配置变量的访问,并且您需要
asset_sync
的这些配置变量才能推送到S3 . 这个(实际上是整个asset_sync HOWTO)的解决方案发布在Using a CDN Asset Host with Rails 3.1指南中 .这种方法的缺点是它违反了一些12 factor app原则 - 特别是与"build, release, run"有关 . 这会产生一些负面影响:例如,
heroku releases:rollback
将回滚您的应用程序,但不会重新编译并重新上传您的资产 .在Rails 3中,您可以使用Rails assets pipeline为资产配置不同的配置 . 基本上在您的
config/environments/production.rb
文件中,您可以执行以下操作:在本地,您将继续直接从Rails服务器提供资源 . 关于部署,您可以使用
aws-s3
gem编写rake任务,或者我认为您应该能够使用capistrano
自动执行此操作 . 另一种选择是使用CDN并将其配置为在 生产环境 服务器上搜索资产,因此您无需单独部署它们 .