错误:FS.Store.S3你必须指定"桶"选项(meteor.js和s3)

时间:2016-02-27 18:37:19

标签: javascript meteor heroku amazon-s3 image-uploading

我按照这里的教程:http://experimentsinmeteor.com/photo-blog-part-1/

我使用时可以让我的应用程序正常运行:

meteor --settings settings.json

但是当我使用" meteor"启动我的本地服务器,或当我将应用程序部署到我的生产(在heroku上)时,应用程序崩溃了,我得到了这个输出:

=> Started proxy.                             
=> Started MongoDB.                           
W20160227-10:30:11.721(-8)? (STDERR)          
W20160227-10:30:11.722(-8)? (STDERR) /Users/*************/.meteor/packages/meteor-tool/.1.1.10.1b51q9m++os.osx.x86_64+web.browser+web.cordova/mt-os.osx.x86_64/dev_bundle/server-lib/node_modules/fibers/future.js:245
W20160227-10:30:11.722(-8)? (STDERR)                        throw(ex);
W20160227-10:30:11.722(-8)? (STDERR)                              ^
W20160227-10:30:11.722(-8)? (STDERR) Error: FS.Store.S3 you must specify the "bucket" option
W20160227-10:30:11.723(-8)? (STDERR)     at new FS.Store.S3 (packages/cfs_s3/packages/cfs_s3.js:95:1)
W20160227-10:30:11.723(-8)? (STDERR)     at lib/collections/images.js:2:20
W20160227-10:30:11.723(-8)? (STDERR)     at /Users/**************/www/myapp/.meteor/local/build/programs/server/app/lib/collections/images.js:58:4
W20160227-10:30:11.723(-8)? (STDERR)     at /Users/**************/www/myapp/.meteor/local/build/programs/server/boot.js:242:10
W20160227-10:30:11.723(-8)? (STDERR)     at Array.forEach (native)
W20160227-10:30:11.723(-8)? (STDERR)     at Function._.each._.forEach (/Users/***************/.meteor/packages/meteor-tool/.1.1.10.1b51q9m++os.osx.x86_64+web.browser+web.cordova/mt-os.osx.x86_64/dev_bundle/server-lib/node_modules/underscore/underscore.js:79:11)
W20160227-10:30:11.723(-8)? (STDERR)     at /Users/*************/www/myapp/.meteor/local/build/programs/server/boot.js:137:5
=> Exited with code: 8

我的应用程序的这一部分结构与教程中的方式类似:

我有一个仅包含settings.json <。p>的.gitignore

我在根目录中有settings.json文件:

{
  "AWSAccessKeyId" : "access key",
  "AWSSecretAccessKey" : "secret",
  "AWSBucket" : "bucket name"
}

然后我有一个lib / collections / images.js文件:

if (Meteor.isServer) {
  var imageStore = new FS.Store.S3("images", {
    /* OPTIONAL IN MOST CASES */
    region: "us-west-1", // substitute the region you selected


    /* REQUIRED */
    accessKeyId: Meteor.settings.AWSAccessKeyId, 
    secretAccessKey: Meteor.settings.AWSSecretAccessKey, 
    bucket: Meteor.settings.AWSBucket
  });

  Images = new FS.Collection("Images", {
    stores: [imageStore],
    filter: {
      allow: {
        contentTypes: ['image/*']
      }
    }
  });
}

// On the client just create a generic FS Store as don't have
// access (or want access) to S3 settings on client
if (Meteor.isClient) {
  var imageStore = new FS.Store.S3("images");
  Images = new FS.Collection("Images", {
    stores: [imageStore],
    filter: {
      allow: {
        contentTypes: ['image/*']
      },
      onInvalid: function(message) {
        Bert.alert(message);
      }
    }
  });
}

// Allow rules
Images.allow({
  insert: function() { return true; },
  update: function() { return true; }
});

我知道这很有效,因为我可以在运行时存储图像:

meteor --settings settings.json

它只使用“流星”。并且在生产中弹出此错误(检查heroku日志并显示相同的内容)。

1 个答案:

答案 0 :(得分:0)

抛出错误是因为您必须通过命令行或环境变量指定设置的位置。关于The Meteor Chef的设置有good blog post。还有一个指向如何设置heroku环境变量here的链接。基本上你使用heroku config:set并指定你的变量。我相信在这种情况下它会像:

heroku config:set METEOR_SETTINGS \"$(cat settings.json)\" -p 'Project Name'