2015年3月31日星期二

【踩坑经历】一次Asp.NET小网站部署踩坑和解决经历 - asxinyu

本邮件内容由第三方提供,如果您不想继续收到该邮件,可 点此退订
【踩坑经历】一次Asp.NET小网站部署踩坑和解决经历 - asxinyu  阅读原文»

  2013年给1个大学的小客户部署过一个小型的Asp.NET网站,非常小,用的sqlite数据库,今年人家说要换台服务器,要重新部署一下,好吧,虽然早就过了服务时间,但无奈谁叫人家是客户了,二话不说,上,源代码和以前的文件都有,部署还不是分分钟的事情,打开IIS挂上去就行了。谁知道,这个部署将近花了2天的时间。看看踩坑过程和解决方法。

本文原文地址:http://www.cnblogs.com/asxinyu/p/4380380.html

1.居然拿XP系统做服务器

  第一个坑其实和我没关系,客户以前用的服务器是Windows Server 2003,对于小网站来说足够了。这次换了服务器,不知道哪根筋抽住了,直接安装了一个XP系统,我远程进去一看,当时看到XP,莫名的冲动,居然IIS都没有,好吧,赶紧叫他们换。虽然XP也能安装IIS,对这个客户来说,无所谓,但拿XP来,的确是让我震惊。

2..NET4.0的项目出现找不到2.0版的“System.Web”

  IIS简单的设置后,启动,一直提示对象为Null,打开日志一看,一大堆的这个错误:

22:36:36.015 1 W - System.IO.FileNotFoundException: Could not load file or assembly 'System.Web, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a' or one of its dependencies. 系统找不到指定的文件。
File name: 'System.Web, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a'
at System.Reflection.RuntimeAssembly._nLoad(AssemblyName fileName, String codeBase, Evidence assemblySecurity, RuntimeAssembly locationHint, StackCrawlMark& stackMark, Boolean throwOnFileNotFound, Boolean forIntrospection, Boolean suppressSecurityChecks)
at System.Reflection.RuntimeAssembly.nLoad(AssemblyName fileName, String codeBase, Evidence assemblySecurity, RuntimeAssembly locationHint, StackCrawlMark& stackMark, Boolean throwOnFileNotFound, Boolean forIntrospection, Boolean suppressSecurityChecks)
at System.Reflection.RuntimeAssembly.InternalLoadAssemblyName(AssemblyName assemblyRef, Evidence assemblySecurity, StackCrawlMark& stackMark, Boolean forIntrospection, Boolean suppressSecurityChecks)
at System.Reflection.RuntimeAssembly.InternalLoad(String assemblyString, Evidence assemblySecurity, StackCrawlMark& stackMark, Boolean forIntrospection)
at System.Reflection.Assembly.ReflectionOnlyLoad(String assemblyString)

  本来项目就是.NET 4.0的,以前的服务器也运行好好的,根本没改过,同样的代码,出现这个错误。找不到2.0版本的System.Web,我虽然不懂,但这也太诡异了,我是无法解释的。那就先 经过搜索引擎 看看啥情况,经过一番360和百毒,在这个页面找到点有用的信息:

http://www.cnblogs.com/yelaiju/p/3375168.html

然后按照文章的方法,下载补丁。。。可惜本来网速就不快,开远程,卡得要死,我就打开QQ想把文件传过去。。。狗日的腾讯,打开个QQ,弹出个页面,悲剧了,直接卡死。。好吧,啥都干不了了。。。

最后只能叫客户下载好,安装上去。。。但是问题依旧。。。后来群里有个朋友叫我在配置文件加上下面一段:

<runtime>
<assemblyBinding xmlns="urn:schemas-microsoft-com:asm.v1">
<dependentAssembly>
<assemblyIdentity name="System.Web" publicKeyToken="b03f5f7f11d50a3a" culture="neutral"/>
<bindingRedirect oldVersion="0.0.0.0-4.0.0.0" newVersion="4.0.0.0"/>
</dependentAssembly>
</assemblyBinding>
</runtime>

加上去,重启了一下,经过一番折腾,好像好了一段时间,但是又报错,Sqlite数据库只读,这个问题还是比较简单,把数据库所在文件夹打开,给user用户权限就搞定了。

  但是还是报上面哪个System.Web的错误,。。。。好吧,已经很晚了,本来想安装一个.net 2.0的环境看看是否有效,但无奈网速太坑爹,远程都进不去。。。。我放弃了,第二天再说把,

3.一招见效,安装.NET 2.0

  早上起来,速度快了一点,果断下载一个.net 2.0的环境安装上去,然后重启了一下,就好了。

  搞不懂啥原因,其实早就想到安装一个2.0的环境,但一直以为很容易就能解决,再加上坑爹的网速和企鹅的弹窗,死了好几回。。。

  留个脚印把,搞不懂原理,请高手赐教。


本文链接:【踩坑经历】一次Asp.NET小网站部署踩坑和解决经历,转载请注明。

项目用到了lua的哪些部分 - 万事屋madao  阅读原文»

昨天有位同事跟我说,我们的手游客户端(cocos2d-x lua binding)代码没有看到lua的特殊技巧,用起来跟其他语言差不多。《Programming in lua》毕竟有将近400多页,他想知道lua的语言特性都用在哪了。当其时回答不上来,现在来思考一下。

要解答他的疑问首先要解答的却是另外两个问题:

1.为什么我们的项目选用了lua?

lua官网是这样介绍lua的:fast, portable, embeddable, powerful(but simple), small, free。这些是选择lua的一部分原因,特别是fast和small,而另一个重要的原因是游戏版本迭代快,lua脚本更新方便。我想这也是cocos2dx官方提供了lua绑定的原因。

而结合到项目组本身的情况,由于客户端的同事之前都是页游出身,使用as3多,接触c++少,都是新学的话,lua的学习成本比c++低。

2.lua有什么语言特性?

自动gc,使用动态类型,function作为first-class value,闭包,万能的table,协程,和c/c++简洁的交互接口。暂时想到这么多,其中前四个比较常见,一般的动态语言都会有,这里的“特性”是相对于c++之类的静态语言而言。

结合项目逐个来看:

自动gc自然是无条件用上了,要考虑的是gc的时机,默认情况下lua是分步gc,而我们选择了在每一帧执行一次完整的gc流程。为什么这样做我倒是没有去问主程,可能是对手机来说内存比较珍贵,例如iphone过了200M就立马kill进程。

动态类型同样也是无条件用上,功效最明显的就是声明变量不需要写冗长的类型了,但有些时候你会发现,写的时候很爽,但看的时候就坑了,所以我的lua代码注释比c/c++多得多。

function作为第一类值,实际上lua的funcion就是没有绑定upvalue的闭包,所以其实是闭包作为第一类值。设置闭包作为回调很是简单明了:

btn.onClick(function () textField.setText(txt))

而c++大概会写出这样的东西:

void SetText(UITextField *text_field, std::string &txt) {
text_field
->setText(txt);
}
btn
->onClick(std::bind(SetText, text_field, txt))

而且这是c++11的写法,更不用说那繁琐的函数类了。

万能的table。lua的table的实现是一个哈希表,可以用除了nil之外的任何值作key,以及用任何值作value。由此可以模拟c/c++的struct,实际上table就是lua自定义数据结构的机制。另外table具有数组部分和散列表两部分,所以通常无需自己去实现数组。

table自然是大量在项目中使用,但的确metatable以及弱表少有用到。

协程是一样好东西,但项目没有用到过。

c/c++简洁的交互接口,最明显的例子就是协议包的打包及发送,都是调用c模块。cocos2dx使用了tolua++,但显然tolua++用的也是lua.h里的接口。

总的来说,作为应用层的开发者,的确不需要用到lua里太过高深的东西,但这实际上就是lua的优势,也达到了项目组原先的目标——让初学者能快速工作。另一方便,如果想看高深的东西,直接去看底层啊,看一看lua源码的实现,看一看lua层设置的回调c++是怎么保持的。

反正,一个程序员的能力并不体现在使用复杂的语言。


本文链接:项目用到了lua的哪些部分,转载请注明。

阅读更多内容

没有评论:

发表评论