1

文档只是说“或定义自定义模式(非杂耍),例如猫鼬。请注意,在自定义模式的情况下,所有 jugglingdb 功能当然都将被禁用。”

然而..

这个模式到底应该在哪里创建?

4

2 回答 2

1

我相信你仍然可以在 db/schema.js 中创建它。例如:

customSchema(function () {

   var mongoose = require('mongoose');
   mongoose.connect('mongodb://localhost/test');

   var Schema = mongoose.Schema, ObjectId = Schema.ObjectId;

   var BlogPost = new Schema({
        author    : ObjectId
      , title     : String
      , body      : String
      , date      : Date
   });

  var Post = mongoose.model('BlogPost', BlogPost);
  Post.modelName = 'BlogPost'; // this is for some features inside railway (helpers, etc)

  module.exports['BlogPost'] = Post;

});
于 2012-04-11T02:04:17.823 回答
1

我在让上面的 customSchema 示例正常工作时遇到了类似的问题。我认为这个小技巧可能会为其他尝试使用 railjs customchemas 的人节省大量时间。

在代码块中放入 aconsole.log("custom schema initialized");customSchema(function() {...}),我注意到 console.log 没有触发......这显然意味着我的db/schema.js文件中的 customSchema 块甚至没有被调用。

经过大量摆弄后,我意识到在您的config/database.json文件中,您必须将驱动程序设置为“内存”(对于您希望 customSchema 运行的任何环境)。例如,如果您将其设置为 driver: "mongoose",则铁路将不会运行 customSchema 代码块。

总而言之,如果您想运行 customSchema,请确保您的 config/database.json 文件如下所示:

{
"production": 
  {
    "driver": "memory",
  },
"development":
  {  
    "driver": "memory"
  },
"test":
  { 
    "driver": "memory"
  }
}

如果你有这样的东西,你的 customSchema 将不起作用:

{
"production": 
  {
    "driver": "mongoose",
    "url": "mongodb://<user>:<pass>@localhost:<port>/<database>"
  },
"development":
  {  
    "driver": "mongoose",
    "url": "mongodb://<user>:<pass>@localhost:<port>/<database>"
  },
"test":
  { 
    "driver": "memory"
  }
}

至少在撰写本文时... railjs 仍在开发中,所以我确信事情可能会改变。我正在使用railwaysjs version 0.2.17-pre4

** 还有一个警告 - 如果你从你的 node_modules 文件夹中删除 'jugglingdb' - 这是与 rail 一起打包的 ORM - 然后 customSchema 将不会被调用。我相信这是因为 'jugglingdb' 紧密集成到 railsjs 框架中。我猜,基本原理是该框架的作者试图模仿 ruby​​-on-rails——我们知道它与 activeRecord 紧密集成。

因此,即使您没有使用 jugglingdb 并且正在运行您自己的自定义模式(例如通过 mongoose 或其他一些 ORM),也不要删除 jugglingdb。

我为此记录了一个错误: https ://github.com/1602/express-on-railway/issues/212

于 2012-08-05T07:54:06.517 回答