首页 文章

rails方式在亚马逊 Cloud 上存储heroku应用程序的资产

提问于
浏览
4

想在heroku上使用我的rails应用程序使用亚马逊的一切都可以(资产,数据库,上传) .

资产最让我烦恼... Heroku帮助文件说创建一个桶来将文件转储到引用中:http://s3.amazonaws.com/bucketname/filename . 这为我提供了两种开发选择(我能想到):

  • 我可以让.gitignore不要查看本地开发的资产,并确保在擦除所有引用或编写帮助后将这些文件上传到我的AWS桶中?

  • 始终将所有东西存放在我的桶中,并在本地开发期间被迫拨打我的桶 .

我想知道我是否可以配置这个以便在本地我可以将app资产存储在app / assets文件夹中,并在推送/部署到heroku时自动将资产推送到亚马逊?

这是我的第一个带有亚马逊的heroku rails应用程序,所以请随意侮辱我应该如何配置这些东西以及正确的工作流程 .

谢谢 .

2 回答

  • 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 将回滚您的应用程序,但不会重新编译并重新上传您的资产 .

  • 0

    在Rails 3中,您可以使用Rails assets pipeline为资产配置不同的配置 . 基本上在您的 config/environments/production.rb 文件中,您可以执行以下操作:

    ActionController::Base.asset_host = "/path/to/s3/bucket"
    

    在本地,您将继续直接从Rails服务器提供资源 . 关于部署,您可以使用 aws-s3 gem编写rake任务,或者我认为您应该能够使用 capistrano 自动执行此操作 . 另一种选择是使用CDN并将其配置为在 生产环境 服务器上搜索资产,因此您无需单独部署它们 .

相关问题