grunt-joycss的can’t find node-gd错误的解决方案

解决了在windows下面安装和使用joycss(或者grunt-joycss)时候报gd相关错误的问题

grunt-joycss或者独立的npm的joycss运行在windows下时,经常会报php gd库未安装,或者can’t find node-gd

这个时候npm install node-gd是注定失败的,因为就连作者本身都说了他没法实现在widows下面安装node-gd,而且问题本身不在这,因为joycss是可以调用php的gd库来实现拼图的。

开启php的gd的方法

joycss是通过cli的方式来调用php(也就是命令行的模式),这个和传统的浏览网页时,由apache来调用是不一样的。

把php加入环境变量

找到你安装的php,把php.exe所在文件夹的绝对路径,复制一份,放到计算机->属性->高级系统设置->环境变量->Path(底下的)里,注意用英文的分号(;)来区分别的路径。

这样做是为了能够在命令行里面调用php

查看配置文件地址

可以通过在CMD窗口里面输入 php --ini (php 5.3版本之后支持) 查看

Loaded configuration file: 就是apache调用的php的ini文件的地址

configuration file(php.ini) path: 这个是cli模式下在哪个文件夹下寻找php.ini文件(一般情况下这个目录是没有php.ini文件,这就是很多时候,明明修改了配置文件,但是在命令行下就是不生效的问题)

修改配置文件

  1. 首先是开启GD库

找到extension=php_gd2.dll,把它前面的分号去掉

  1. 修改extension_dir的地址

在某些集成套件的设定里面,extension_dir是相对路径的。

默认情况下,这样的extension_dir也是能正常的在apache调用的时候工作,因为只有一个配置文件,相对路径也没问题。

但是后面是需要把配置文件复制一份到刚刚上一步找到的configuration file(php.ini) path:目录下,所以extension_dir必须改成到ext文件夹的绝对路径,例如:d:/usr/local/php5/ext

  1. 复制配置文件

复制刚刚修改完毕的配置文件,粘贴到configuration file(php.ini) path:指定的目录,一般是:C:windows。然后重命名为php.ini(某些集成套件里面,配置文件可能默认的名字不是php.ini)

重启电脑

试过重启apache,但是对之前的修改貌似没有效果,暂时也不知道是重启哪个服务能让之前的修改生效。所以,重启电脑吧!(如果有别的更好的方法,也欢迎指正)

现在,好好享受joycss!

windows modules installer占用过多磁盘读写和CPU的解决方案

解决windows8下面windows modules installer占用过多内存的问题

用windwos8/8.1的时候,虽然电脑很新,性能也还算不错,可总是经常用了一会儿之后,突然的变得非常的卡。

今天又是这样,才开机一个小时左右的,又卡的不得了。决心解决这个问题。

打开任务管理器,看了下进程。发现有个叫windows modules installer的占用了很多的磁盘读写和CPU,弄的电脑的磁盘读写时满满的100%,而CPU也被占据了20%之多。

上网查了下,这个进程主要是进行windows更新。而且也有很多人的window8有着同样的问题。

具体产生这个问题的原因就没看了,但是找到了两种解决方式:

第一种是野路子:http://social.technet.microsoft.com/Forums/windows/zh-CN/2f46738f-75fa-4e48-ba60-79f473aac6f6/windows-modules-installer-worker-is-making-my-computer-hang

在回帖的最后,倒数第三条,有人说了个法子:关闭自动更新。不自动更新,那个进程也就不会被启动了。

第二种是官方的:

据官方说法,安装了这个更新就能解决这个问题和顺带的其他很多很多问题。官方的贴子地址是:http://support.microsoft.com/kb/2771431/en-us上面说到,这个更新对Windows 8 和 Windows Server 2012都是有效的,安装之后可以解决:

A Windows 8-based or Windows Server 2012-based computer experiences high CPU usage when it runs a Windows Update applicability scan. Additionally, the applicability scan takes longer than expected.

我偷懒了,用的第一种方式。很有效,关闭自动更新之后,那个进程立马就没了。然后我又建了个Google日历,隔一个星期提醒我开启自动更新一次。

如果有人不想定期开启自动更新,那可以尝试着用第二种方法,也欢迎反馈一下,让后来者都安心

无法找到来自源 Zend Loader 的事件 ID 5 的描述

讲了针对错误——无法找到来自源 Zend Loader 的事件 ID 5 的描述,的一些解决方法和思路

今天在查看windows日志中的应用程序日志时,发现如下错误:

无法找到来自源 Zend Loader 的事件 ID 5 的描述。本地计算机上未安装引发此事件的组件,或者安装已损坏。可以安装或修复本地计算机上的组件。

如果该事件产生于另一台计算机,则必须在该事件中保存显示信息。

以下是包含在事件中的信息: 

C:WINDOWSTEMPZendLoader.MemoryBase@SYSTEM@3391924446 拒绝访问。

系统:windows 8.1
web环境:nginx/1.5.3 PHP/5.3.27

依旧是先Google了一下,在这篇文章里找到了解决方式

看了不是很理解,找了其中的几个关键词:php.ini,upload_tmp_dir,C:WINDOWSTemp,Network Service,IIS_WPG,ZendOptimizer.MemoryBase@SYSTEM和ZendOptimizer.MemoryBase@NETWORK SERVICE。

大体的意思是:在php.ini中upload_tmp_dir的值为C:WINDOWSTemp的时候,在确保ZendOptimizer.MemoryBase@SYSTEM和ZendOptimizer.MemoryBase@NETWORK SERVICE两个文件存在的时候(没有则新建一个命名相同的空文件),给Temp文件夹添加Network Service和IIS_WPG的写入权限,就能解决问题。

然后我根据这个思路,开始着手根据我自己的环境和配置,尝试着解决问题。

首先,我的php.ini中,关于upload_tmp_dir这块如下:

;;;;;;;;;;;;;;;;
; File Uploads ;
;;;;;;;;;;;;;;;;

; Whether to allow HTTP file uploads.
; http://php.net/file-uploads
file_uploads = On

; Temporary directory for HTTP uploaded files (will use system default if not
; specified).
; http://php.net/upload-tmp-dir
;upload_tmp_dir =

; Maximum allowed size for uploaded files.
; http://php.net/upload-max-filesize
upload_max_filesize = 32M

; Maximum number of files that can be uploaded via a single request
max_file_uploads = 20

我的upload_tmp_dir 是被注释掉的,但是file_uploads 是开启的,所以upload_tmp_dir 用的是默认的值。然后在这篇文章中找到如下一句话:

The reason for this is, the uploaded file will inherit the permissions of the directory specified in the directive upload_tmp_dir of php.ini.  If this directive isn't set, the default of C:WindowsTemp is used.

所以我的upload_tmp_dir 在默认值的情况下用的是 C:WindowsTemp

在我的Temp文件夹下是有文件ZendLoader.MemoryBase@SYSTEM@3391924446的,这一点和文章里面说的不太一样,可是我的错误信息里面明确是指定这个文件的,所以暂时不需要添加那两个空文件。

然后就是给Temp文件夹添加权限了,首先得知道Network Service和IIS_WPG分别代表什么?

看MSDN上面的,可以知道Network Service是一个被服务控制管理器(service control manager)使用的本地账号,用来在网络中代表这台计算机。

这篇文章里面找到的针对IIS_WPG的定义是:

There was also a group called IIS_WPG, which was used as a container for all the application pool identities. During IIS setup, all the appropriate resources on the system were granted the correct user rights for the IIS_WPG group so that an administrator only needed to add their identity to that group when they created a new application pool account.

大致的意思是给所有IIS应用管理权限的一个组。

可问题是,我用的不是IIS,所以得找到和Nginx相关的账号.可是看了下,貌似nginx和IIS不一样,它是一个服务,是运行在本地系统账户下的一个服务。所以我不知道该怎么办了。先给Temp账户添加了Network Service的写入权限。然后清空日志,看看明天重启的时候报什么错吧

============== 后续更新 =====================

2013年10月24日

今天开机一段时间之后,查看应用程序日志,没有发现此错误

2013年10月25日

今天开机之后,查看应用程序日志,问题再次出现,分为两种问题状态:

C:WINDOWSTEMPZendLoader.MemoryBase@SYSTEM@3391924446
拒绝访问。

Unable to write base address
拒绝访问。

服务器没有在要求的超时时间内向 DCOM 注册

服务器没有在要求的超时时间内向 DCOM 注册,可能的问题时network service没有足够的启动和激活权限

今天查看系统日志发现有如下两个问题:

  1. 服务器 {F9717507-6651-4EDB-BFF7-AE615179BCCF} 没有在要求的超时时间内向 DCOM 注册。
  2.  Provider 
  3.  
  4.    [ Name]  Microsoft-Windows-DistributedCOM 
  5.    [ Guid]  {1B562E86-B7AA-4131-BADC-B6F3A001407E} 
  6.    [ EventSourceName]  DCOM 
  7.  
  8.   - EventID 10010 
  9.  
  10.    [ Qualifiers]  0 
  11.  
  12.    Version 0 
  13.  
  14.    Level 2 
服务器 {EA022610-0748-4C24-B229-6C507EBDFDBB} 没有在要求的超时时间内向 DCOM 注册。
Provider 

   [ Name]  Microsoft-Windows-DistributedCOM 
   [ Guid]  {1B562E86-B7AA-4131-BADC-B6F3A001407E} 
   [ EventSourceName]  DCOM 
 
  - EventID 10010 

   [ Qualifiers]  0 
 
   Version 0 
 
   Level 2 

在网上找到有个人跟我系统差不多同时也是遇到同样问题的,链接如下:
http://answers.microsoft.com/en-us/windows/forum/windows_7-performance/error-microsoft-windows-distributedcom-id10010/481acdc3-3402-40ac-af9a-330908fd5754

具体的方式是通过给 Network Service 角色添加相应的权限,步骤如下:
A. 在“运行”里面输入命令dcomcnfg
B. 双击“组件服务”->双击“计算机”
C. 右键点击“我的电脑”,选择“属性”
D. 点击“COM安全”菜单项
E. 在“启动和激活权限”的区域内,点击“编辑默认值”
F. 点击“添加” ,在“输入对象名称来选择”下方区域内输入“Network Service” ,可点击右侧的“检查名称”来规范正确的输入,之后点击“确定”
G. 确保选中了“NETWORK SERVICE”,点击下方的复选框,保证如下权限的“允许”是选中的:
H. 本地启动
I. 远程启动
J. 本地激活
K. 远程激活
L. “确定”->“确定”

下面的链接是微软官方对Event ID 10010的说明
http://technet.microsoft.com/en-us/library/cc774175(WS.10).aspx

机器就按上述的设置了,具体的效果等随后一段时间看看是否还会有上述问题发生,来确定设置是否有效