我正在构建一个通过CarrierWave处理文件上传的Rails应用程序.目前,较大的文件上传会阻塞服务器大量的时间.我已经看到像s3-swf-upload-plugin gem这样的解决方案,可以跳过本地服务器并将文件直接从浏览器发送到S3,但是这将需要一些修改来预生成唯一的文件名并与数据库同步.我相信这不会太麻烦,但是Heroku的新雪松堆栈给了我将这些长时间运行的请求卸载到在同一个应用程序中运行的node.js实例的想法.我对这些事情不是很有经验,所以请原谅我的话.
会有这样的事吗?您将如何配置某些请求(在这种情况下涉及文件上传的请求)将由与主rails应用程序捆绑在同一英雄库中的节点应用程序来处理?
解决方法
我不认为可以在同一个应用程序中混合Rails和Node.但是,您可以通过使用彼此通信的两个单独的应用程序获得大致相同的功能.
您可以使用ENV [‘DATABASE_URL’]来确定数据库连接字符串.使用英雄控制台将其设置为您的节点应用程序的ENV变量(例如,heroku config:add OTHER_DB = your_connection_string)应该能够使用相同的连接字符串从其他英雄应用程序连接到同一数据库.如果您有专门的数据库,您甚至可以在heroku之外访问它,请参阅:http://devcenter.heroku.com/articles/external-database-access
为了在两个应用程序之间实现无缝集成,您可以将Rails应用程序呈现的表单发布到Node应用程序的URL.除了文件上传之外,还可以通过隐藏的输入字段将所需的其他变量与Node应用程序通信.当上传到Node应用程序完成后,它可以将客户端重定向回Rails应用程序,将任何状态或变量作为get参数传递.
在同一个域的两个子域下运行两个应用程序,甚至可以在它们之间共享cookie.