4

希望在 Heroku 上使用我的 Rails 应用程序,一切都可以(资产、数据库、上传)使用亚马逊。

资产最困扰我... Heroku 帮助文件说要创建一个存储桶来将文件转储到并引用为:http ://s3.amazonaws.com/bucketname/filename 。这给了我两种开发选择(我能想到的):

  1. 我可以让 .gitignore 不查看要在本地开发的资产,并确保在清理所有参考资料或编写一些帮助程序后将这些文件上传到我的 AWS 存储桶?
  2. 始终将所有内容存储在我的存储桶中,并在本地开发期间被迫调用我的存储桶。

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

这是我在亚马逊上的第一个 heroku rails 应用程序,所以请随意侮辱我对如何配置这些东西以及正确的工作流程的智慧。

谢谢。

4

2 回答 2

2

试试asset_sync宝石。这可以让您完全按照自己的意愿行事:在本地使用资产管道,然后在推送到 Heroku 后从 S3(可选地通过 Cloudfront)提供资产。

请注意,Heroku 的编译步骤通常不提供对配置变量的访问,您需要这些配置变量asset_sync才能推送到 S3。对此的解决方案(实际上是整个asset_sync HOWTO)发布在Using a CDN Asset Host with Rails 3.1指南中。

这种方法的缺点是它违反了应用程序的 12 要素原则中的一些——特别是与“构建、发布、运行”有关。这会产生一些负面影响:例如,heroku releases:rollback将回滚您的应用程序,但不会重新编译和重新上传您的资产。

于 2012-10-28T15:17:42.663 回答
0

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

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

在本地,您将继续直接从 Rails 服务器提供资产。关于部署,您可以使用 gem 编写 rake 任务,aws-s3或者我认为您应该能够使用capistrano. 另一种选择是使用 CDN 并将其配置为在生产服务器上搜索资产,这样您就不需要单独部署它们。

于 2012-10-28T09:40:03.460 回答