Heroku的Rails:如何下载由rake任务创建的CSV

时间:2015-03-30 14:23:29

标签: ruby-on-rails heroku

我部署了" Harrys Prelauncher"在Heroku上并尝试进行拆解(目前只是测试)。见这里:https://github.com/harrystech/prelaunchr#teardown

运行rake任务后......

heroku run rake prelaunchr:create_winner_csvs

...在" / lib / assets"中创建了一个csv文件,但我不知道如何访问该文件(它在开发中本地工作)。

如何下​​载或访问该文件?

2 个答案:

答案 0 :(得分:2)

Heroku使用的“短暂”文件系统无法保证在运行时保留更改。简单地说,如果它没有被推送到git(我假设你正在使用带有heroku的git),那么它不能保证存在于你的应用程序的所有实例中。它可能存在于其中一个中,但您可能没有简单的方法来访问该特定的文件系统。你不应该,真的。

它就是这样完成的,这样可以无缝地启动同一个应用程序的多个实例。当然,这需要一些规则:在外部存储任何有意义的状态:在数据库中,在外部磁盘上,任何地方。这样做的好处是横向可伸缩性:如果您缺少资源,您可以启动另一个(通常)行为完全相同的Web dyno。新的dynos是从git push打包的捆绑开始的,因此不包含您在其他实例中所做的任何更改。

解决方法可能正在运行heroku run bash,因此您最终会进入链接到另一个捆绑实例的交互式shell。

然后您可以制作该文件(通过运行您的rake任务)并以您认为合理的任何方式访问其内容。可以使用cat将文本文件回显到控制台中,并在其他任何位置进行复制粘贴。那是一种肮脏的方式。

更干净的方法是操纵应用程序通过电子邮件发送有问题的文件。如果Rails应用程序本身调用了rake任务,那么这是少数合理的方法之一。

答案 1 :(得分:1)

我最近在为客户开发Prelaunchr广告系列时遇到了这个问题。假设您有一个本地版本的应用程序,您可以将Heroku数据库“拉”到本地计算机,将其设置为database.yml中的开发数据库,​​并从本地应用程序运行rake任务,该任务现在应该具有与heroku版本相同的数据库。这是拉取db的命令(用你自己的名称替换name_for_database& heroku_app_name):

heroku pg:pull HEROKU_POSTGRESQL_COPPER_URL name_for_database --app heroku_app_name

确保重新启动本地服务器以查看填充的新数据库信息。