[英]Site works locally / Not on Openshift (syncing local, global npm package versions with server, global npm package versions)
我正在使用Angular創建一個論壇-它與Node / Mongo交互,因此需要執行很多請求才能用所需的數據填充頁面。 一切都在本地正常運行,但是當我上傳到Openshift時...該網站似乎存在很多錯誤,並且似乎執行的請求(如果不是全部)或請求的一半以上使論壇發揮作用。
我使用的是yeoman
MEAN
堆棧稱為angular-fullstack
。 如果您擁有yeoman
,則可以使用yo angular-fullstack
創建種子。
我必須更改該種子中的唯一內容,才能將其上傳到openshift:
server.js
...
// Set default node environment to development
process.env.NODE_ENV = process.env.NODE_ENV || 'development';
...
至
...
// Set default node environment to development
process.env.NODE_ENV = process.env.NODE_ENV || 'production';
...
上一行在lib / config / express.js中引用了以下代碼:
if ('development' === env) {
app.use(require('connect-livereload')());
// Disable caching of scripts for easier testing
app.use(function noCache(req, res, next) {
if (req.url.indexOf('/scripts/') === 0) {
res.header('Cache-Control', 'no-cache, no-store, must-revalidate');
res.header('Pragma', 'no-cache');
res.header('Expires', 0);
}
next();
});
app.use(express.static(path.join(config.root, '.tmp')));
app.use(express.static(path.join(config.root, 'app')));
app.set('views', config.root + '/app/views');
}
if ('production' === env) {
app.use(compression());
app.use(errorHandler());
app.use(favicon(path.join(config.root, 'public', 'favicon.ico')));
app.use(express.static(path.join(config.root, 'public')));
app.set('views', config.root + '/views');
}
...
// Error handler - has to be last
if ('development' === app.get('env')) {
app.use(errorHandler());
}
因此,如果您注意到該production
代碼段有什么問題,那就讓我知道,這就是正在運行的代碼。
另外,需要更改Mongo URI
才能與我在Openshift上設置的MongoDB盒一起使用:
mongo: {
uri: process.env.MONGOLAB_URI ||
process.env.MONGOHQ_URL ||
process.env.OPENSHIFT_MONGODB_DB_URL+process.env.OPENSHIFT_APP_NAME ||
'mongodb://whateveritwas'
}
至
mongo: {
uri: process.env.MONGOLAB_URI ||
process.env.MONGOHQ_URL ||
process.env.OPENSHIFT_MONGODB_DB_URL+process.env.OPENSHIFT_APP_NAME ||
'mongodb://admin:xxxxx@127.10.13.X:27017/hackabox' //the X's are to protect me
}
最初,要使其上傳到Openshift,必須在項目文件夾中運行yo angular-fullstack:openshift
,但是我已經這樣做了,所以現在要做的就是在Openshift上更新我的代碼:
進入控制台中的項目文件夾,然后鍵入grunt build
(這將創建dist
文件夾)
轉到dist
文件夾,將所有內容添加到git
並運行git push
。
之后,我可以轉到Openshift URL並查看該站點。
現在真正發生的是(我正在關注的)-是當您轉到可以查看該帖子的頁面時(它的內容,它的作者,它的評論)-您可以添加評論,並且它們最初會顯示是因為角度的工作原理...但是當我導航離開並返回時...此代碼似乎未按預期執行:
$scope.loadpost = function() {
$http.get('/api/posts/'+$routeParams.id).success(function (data) {
$scope.post = data;
$scope.comments = $scope.post.comments;
console.log('this is scope comments ' + $scope.comments);
if($scope.comments[0] !== undefined) {
$scope.commentstring.empty = '';
}
});
};
出於測試目的...我在后控制器的頂部調用它,如下所示:
$scope.loadpost();
我也在頁面加載時使用ng-init
調用它,如下所示:
<div ng-init="loadpost()">
這是我要詳細說明問題的地方
我知道這是多余的...但是重點是...頁面加載時永遠不會調用該函數...並且從數據庫獲取所需的所有帖子內容都不會到達,因為請求永遠不會發生-我可以看到控制台中什么都沒有發生-您也可以在頁面的“論壇”部分中查看我在說什么-http://hackabox-eamonbenproject.rhcloud.com/forum 。 要發布信息,您必須先以用戶身份注冊...然后您可以通過以下方式查看我在說什么:進入論壇,單擊其中一則信息...發表評論...,然后瀏覽並回來...您不必發表評論,您將看不到任何內容...但是它將幫助您看到問題,因為創建評論時,應該會發生一個PUT
請求,並進行更新帖子,但那也永遠不會發生...以及一堆也不會被調用的GET
請求。 另外,我注意到(至少一次)...如果我在論壇中做某事...然后導航到“設置”頁面,則有時徽標消失了...
我開始認為運行grunt build
時進行的縮小過程正在弄亂代碼...因此當將其加載到openshift時,它會變得非常有bug ...但這只是預感-我猜為了檢驗我的理論,我想知道是否有沒有縮小就上傳到Openshift?
謝謝!
UPDATE
正如我今天和Pogrindis討論的那樣,當應該發生請求時,節點在openshift上登錄時出錯。 它在節點日志中說這是Express錯誤...並且我們意識到openshift上npm的全局版本正在使用3.2.5,而我正在使用的種子使用express v4.2.0(這就是我所使用的)全球,本地)。 我正在將本地的全球快車npm降級到3.2.5,以查看是否可以解決問題...但是向Pogrindis +1以便向我介紹節點版本管理器...以及必須同步在Openshift上全局安裝的任何npm軟件包的版本! 將保持所有人的狀態,以確保此問題得以解決!
很難回答的問題。 有很多要看的。
版本中的節點很大,您可能有一個錯誤的版本,並且可能會引起粉絲的注意。
我想到了一個特別的VERSION Saving github主題。
如果這不是問題,則仍然需要記住,它不是包含版本控制的強類型lang。
https://github.com/npm/npm/issues/3417
此問題“ FIX”將殺死使用先前(次要)版本的許多用戶。 您需要具體說明版本。 (我以此為例)
Node會很好地解決很多版本問題,除非您指定版本,否則它將獲得最新版本。
因此,除非在軟件包中指定了版本,否則在本地(經過3個月的辛苦勞動)機器上工作毫無意義。
您的服務器將僅具有最新版本。
從問題開始..只能是版本問題。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.