无法在流浪盒上创建工作流星.js 项目
Posted
技术标签:
【中文标题】无法在流浪盒上创建工作流星.js 项目【英文标题】:Can't create working meteor.js project on a vagrant box 【发布时间】:2014-10-31 23:26:35 【问题描述】:我无法在 Vagrant linux 机器(在 Mac 上运行)上启动新的 Meteor 应用程序。每次在 Mongo 中出现“未指定的未捕获异常”时都会失败。我已经尝试了很多方法来实现这一点,但即使使用最简单的设置,我也无法让项目运行。如有任何建议,我将不胜感激。
我的步骤是:
-
创建一个完全干净的 Vagrant 盒子(“ubuntu/trusty64”);
在新盒子上安装 Meteor (
curl https://install.meteor.com/ | sh
);
选择创建项目的位置;
创建一个新的 Meteor 项目 (meteor create app
);
启动项目 (cd app; meteor
)
我知道 vagrant 共享文件夹的权限很奇怪,所以对于上面的第 3 步,我尝试将项目放入:
-
在共享来宾/主机文件夹中,
/vagrant
,
在 Vagrant 主文件夹 (/home/vagrant
) 的子目录中,
在/
的子目录中(权限设置为vagrant:vagrant
),并且
在/
的子目录中,权限设置为root:root
,使用sudo meteor create app
创建并使用sudo meteor
运行的项目
在所有情况下,我都会看到此错误:
=> Started proxy.
Unexpected mongo exit code 100. Restarting.
Unexpected mongo exit code 100. Restarting.
Unexpected mongo exit code 100. Restarting.
Can't start Mongo server.
MongoDB had an unspecified uncaught exception.
This can be caused by MongoDB being unable to write to a local database.
Check that you have permissions to write to .meteor/local. MongoDB does
not support filesystems like NFS that do not allow file locking.
我无法判断这是 Vagrant 问题(尽管我认为不是,鉴于我已经尝试过)还是 Meteor 问题,但我怀疑它是 Meteor(或其众多依赖项之一)。我怀疑这是一个权限问题,因为它在以 root 身份运行时失败。我尝试从头开始构建流星,但构建失败,我尝试使用--release 0.9.0
和--release 0.9.2-rc1
创建项目,下载被简单地杀死,没有解释。
【问题讨论】:
【参考方案1】:我在尝试在 Windows 上运行流星时遇到了类似的问题。看来 mongodb 无法写入 /vagrant 文件夹。我通过这样做解决了这个问题
sudo mount --bind /home/vagrant/meteorapp/.meteor/ /vagrant/meteorapp/.meteor/
(从https://gist.github.com/gabrielhpugliese/5855677得到)
【讨论】:
【参考方案2】:(1)在第2步后'在新盒子上安装Meteor (curl https://install.meteor.com/ | sh)'
user$ cd /vagrant
user:/vagrant$ meteor create myApp
您应该会在 Mac 主机上看到 myApp 文件夹(与 vagrantfile 相同的文件夹)
(2) 在myApp文件夹里面,你会看到默认的.meteor文件夹,如果没有的话,创建一个叫local的文件夹
user:/vagrant$ cd myApp/.meteor
user:/vagrant/myApp/.meteor$ mkdir local
(3)在/home/vagrant下创建相同的文件夹结构
user:/vagrant/myApp/.meteor$ cd ~
~$mkdir -p myApp/.meteor/local
(4) 链接或挂载 /vagrant/myApp/.meteor/local 到 /home/vagrant/myApp/.meteor/local
sudo mount --bind /home/vagrant/myApp/.meteor/local/ /vagrant/myApp/.meteor/local/
或永久保存
echo “sudo mount --bind /home/vagrant/myApp/.meteor/local/ /vagrant/myApp/.meteor/local/” >> ~/.bashrc && source ~/.bashrc
(5) 现在可以启动流星了
~$cd /vagrant/myApp
user:/vagrant/myApp$meteor
我安装本地文件夹而不是 <.meteor> 文件夹的原因是您仍然可以在 Mac 主机上的 <.meteor> 文件夹中编辑文件。您可以将 myApp 替换为您想要的任何名称
希望有帮助
【讨论】:
这应该是市场的正确答案。也适用于 VMWare 这也修复了 Windows 7 中的Unexpected mongo exit code 45. MongoDB cannot open or obtain a lock on a file
。
很棒的解决方案。我似乎唯一无法让它工作的是流浪者中的流星重置。有什么想法吗?
@adamsoh:如果您使用上述解决方案。如果您没有创建永久坐骑,流星重置将起作用。我所做的是首先,做一个 vagrant reload。这会强制重新启动,并清除挂载点。然后进入 /vagrant/node_modules
目录上的节点项目【参考方案3】:
我正在使用 Windows 主机,但也许这也适用于您的情况。
导致问题的唯一文件夹是./meteor/local
。如果您使用符号链接将其重新定位到共享的/vagrant
文件夹之外,您应该能够正常运行流星应用程序。
但是,要将符号链接放在共享文件夹中,您需要在 VM 中启用符号链接...这需要以管理员身份启动 Vagrant。
我在这里整理了一个带有一些脚本和说明的 Vagrantfile:
https://github.com/ElectronVector/vagrant-meteor
【讨论】:
谢谢。不幸的是,我在您的 Vagrant 文件和说明中遇到了同样的问题。我认为这个问题是 Mac 特有的。我怀疑(虽然我还没有确认)如果我使用 rsync(而不是任何其他文件系统共享系统)设置复制,问题就会消失。 谢谢,很抱歉没有为您解决。我尝试在 Windows 上使用 rsync 进行设置,但它最初对我不起作用。 Vagrant 似乎是一个非常棒的想法,但似乎需要做一些工作才能使其在任何地方都能开箱即用。祝你好运!【参考方案4】:这是解决了我的问题的answer。从 Debian VMware 虚拟机(在 Windows 上运行)上的共享文件夹启动流星项目。
问题是 mongodb 无法在共享文件夹中创建数据文件,所以在这种情况下,只需将现有的 mongodb 用于流星项目:
export MONGO_URL=mongodb://localhost:27017/your_db
【讨论】:
【参考方案5】:在做
vagrant reload --provision
解决了我的问题。 我认为原因可能是某些文件已损坏或删除。
【讨论】:
以上是关于无法在流浪盒上创建工作流星.js 项目的主要内容,如果未能解决你的问题,请参考以下文章