如果你看到这篇文章,先别急着动手,过完一遍,确定是你要的再动手。

  别人提到的这里不赘述,只说查了好久才知道的。

1号坑:System.IO.FileNotFoundException Could not find file "roslyn\csc.exe".
详细信息如下:

System.IO.FileNotFoundException
Could not find file "/var/www/defalut/bin\roslyn\csc.exe". Description: HTTP .Error processing request. Details: Non-web exception. Exception origin (name of application or object): mscorlib.
Exception stack trace:
at System.IO.FileStream..ctor (System.String path, FileMode mode, FileAccess access, FileShare share, Int32 bufferSize, Boolean anonymous, FileOptions options) <0x41aaab70 + 0x006e7> in <filename unknown>:
at System.IO.FileStream..ctor (System.String path, FileMode mode, FileAccess access, FileShare share) <0x41bba470 + 0x00053> in <filename unknown>:
at (wrapper remoting-invoke-with-check) System.IO.FileStream:.ctor (string,System.IO.FileMode,System.IO.FileAccess,System.IO.FileShare)
at System.IO.File.OpenRead (System.String path) <0x41bc4b50 + 0x0003f> in <filename unknown>:
at Microsoft.CodeDom.Providers.DotNetCompilerPlatform.Compiler.get_CompilerName () <0x41e0fb40 + 0x00086> in <filename unknown>:
at Microsoft.CodeDom.Providers.DotNetCompilerPlatform.Compiler.FromFileBatch (System.CodeDom.Compiler.CompilerParameters options, System.String[] fileNames) <0x41e1d600 + 0x005ce> in <filename unknown>:

只贴其中的一部分,但是大致一看也能看出路径有问题,问题的原因:

http://www.mono-project.com/docs/advanced/iomap/

Mono官方网站给出的解释及解决方案如下:

The Problem

Windows developers are used to a case-insensitive file system, which means that they might create a file called “mydata” in one place, and try to access it somewhere else as “MyData” or as “MYDATA”. This breaks on most Unix setups because Unix is case sensitive[1].

Another problem is that developers sometimes hardcode the directory separator character in their source code (“\”) instead of using Path.DirectorySeparator and using Path.Combine for combining this paths. This is a problem because “\” is a valid file name components on Unix. This means that if an application hardcodes for example “Logs\access_log”, in Unix this will not store the contents in the “Logs” directory as the file “access_log”. Instead, it will store the results in a file called “Logs\access_log”.

Only a few applications cope with drive letters, but they might still pose a problem as the colon is a valid filename in Unix, which means that “A:\file” is a valid filename in the current directory.

Although .NET provides the tools to write code that is portable, in practice, they do not use these features (the exception is Path.Combine, which some people use, as it is genuinely useful on its own).

The Usual Solution

When moving applications from Windows to Linux, it is always necessary to run the application, run its test suite, and validate that the application works as intended. With the path problems described above, the process above included a number of iterations to fix the assumptions made by programmers about the file system.

This process could be time consuming, because identifying where the mistakes were made could take some time, the program might fail with FileNotFound exceptions (when referencing files that were not there), data would show up empty (listing contents of a directory that had nothing, as all the data went elsewhere) but it was doable.

This process works as long as you have the source code to all the components that you are porting, but if you were using a third-party library that you had no source code for, you would not be able to fix the problems.

The New Solution

Mono now has a portability layer into Mono that will address those problems without requiring changes to your code. This will remove a large component of the porting cycle as a whole class of obnoxious problems are gone.

The new portability framework is enabled by setting the environment variable MONO_IOMAP (which we will likely rename to something shorter) to one of the following values:

  • case: makes all file system access case insensitive.
  • drive: strips drive name from pathnames.
  • all: enables both case and drive.

In addition, if any of those options are enabled, the directory separator mapping is also turned on. So this basically means that you have to type this, or include this in your script that launches your application:

   $ export MONO_IOMAP=all
$ mono myapp.exe

For ASP.NET applications hosted with mod_mono, you can add the following directive to your Apache configuration file:

 MonoSetEnv MONO_IOMAP=all

This new feature appeared in Mono 1.1.18 and is available in all new Mono 1.2.x versions as well.

The downside is that Mono will have to do some extra work when coping with your file system, to search for case insensitive file names. So if your application is still a portable application, you will be much better off without this switch.

[1] Some Linux file systems are case insensitive, and some folks have used a combination of hacks, including doing loopback CIFS mounts to get case sensitivity issues out of the way; OS X does not have this particular problem, but it still has the others.

2号坑:System.InvalidOperationException  Process has not been started.

详细信息如下:

Description: HTTP .Error processing request.
Details: Non-web exception. Exception origin (name of application or object): System.
Exception stack trace:
at System.Diagnostics.Process.get_ExitCode () <0x414b69b0 + 0x000a3> in <filename unknown>:
at (wrapper remoting-invoke-with-check) System.Diagnostics.Process:get_ExitCode ()
at System.CodeDom.Compiler.Executor.InternalExecWaitWithCapture (System.String cmd, System.String currentDir, System.CodeDom.Compiler.TempFileCollection tempFiles, System.String& outputName, System.String& errorName) <0x414b3ec0 + 0x00403> in <filename unknown>:
at System.CodeDom.Compiler.Executor.ExecWaitWithCapture (IntPtr userToken, System.String cmd, System.String currentDir, System.CodeDom.Compiler.TempFileCollection tempFiles, System.String& outputName, System.String& errorName) <0x414b3c00 + 0x00057> in <filename unknown>:
at Microsoft.CodeDom.Providers.DotNetCompilerPlatform.Compiler.Compile (System.CodeDom.Compiler.CompilerParameters options, System.String compilerFullPath, System.String arguments, System.String& outputFile, System.Int32& nativeReturnValue) <0x414b37e0 + 0x0010b> in <filename unknown>:
at Microsoft.CodeDom.Providers.DotNetCompilerPlatform.Compiler.FromFileBatch (System.CodeDom.Compiler.CompilerParameters options, System.String[] fileNames) <0x414b03e0 + 0x005ef> in <filename unknown>:
at Microsoft.CodeDom.Providers.DotNetCompilerPlatform.Compiler.CompileAssemblyFromFileBatch (System.CodeDom.Compiler.CompilerParameters options, System.String[] fileNames) <0x414b0250 + 0x000c7> in <filename unknown>:
at System.CodeDom.Compiler.CodeDomProvider.CompileAssemblyFromFile (System.CodeDom.Compiler.CompilerParameters options, System.String[] fileNames) <0x414b00b0 + 0x00049> in <filename unknown>:
at System.Web.Compilation.AssemblyBuilder.BuildAssembly (System.Web.VirtualPath virtualPath, System.CodeDom.Compiler.CompilerParameters options) <0x4149bd40 + 0x00979> in <filename unknown>:
at System.Web.Compilation.AssemblyBuilder.BuildAssembly (System.Web.VirtualPath virtualPath) <0x4149bd00 + 0x00023> in <filename unknown>:
at System.Web.Compilation.BuildManager.GenerateAssembly (System.Web.Compilation.AssemblyBuilder abuilder, System.Web.Compilation.BuildProviderGroup group, System.Web.VirtualPath vp, Boolean debug) <0x414913e0 + 0x0097b> in <filename unknown>:
at System.Web.Compilation.BuildManager.BuildInner (System.Web.VirtualPath vp, Boolean debug) <0x41444aa0 + 0x0050b> in <filename unknown>:
at System.Web.Compilation.BuildManager.Build (System.Web.VirtualPath vp) <0x41444520 + 0x000ff> in <filename unknown>:
at System.Web.Compilation.BuildManager.GetCompiledType (System.Web.VirtualPath virtualPath) <0x41443e20 + 0x0008f> in <filename unknown>:
at System.Web.Compilation.BuildManager.GetCompiledType (System.String virtualPath) <0x41443a50 + 0x00017> in <filename unknown>:
at System.Web.HttpApplicationFactory.InitType (System.Web.HttpContext context) <0x413dd430 + 0x003f3> in <filename unknown>:

我这里只是创建的一个简单的MVC Demo,接下来需要做的几件事。其实这样做完上面的两个问题都不会遇到。

Microsoft.AspNet.Mvc.5.2.
修改为
Microsoft.AspNet.Mvc.4.0. Microsoft.AspNet.Razor.3.2.
修改为
Microsoft.AspNet.Razor.2.0.
此时
Microsoft.AspNet.WebPages.3.2.
会自动替换为
Microsoft.AspNet.WebPages.2.0. 卸载
Microsoft.CodeDom.Providers.DotNetCompilerPlatform.1.0. 项目中的Web.config需要作的修改(修改版本信息,要与项目引用的一致。)
System.Web.Razor
<bindingRedirect oldVersion="0.0.0.0-2.0.0.0" newVersion="2.0.0.0"/> System.Web.WebPages.Razor
<bindingRedirect oldVersion="0.0.0.0-2.0.0.0" newVersion="2.0.0.0"/> Views下的Web.config需要作的修改(修改版本信息,要与项目引用的一致。)
<sectionGroup name="system.web.webPages.razor" type="System.Web.WebPages.Razor.Configuration.RazorWebSectionGroup, System.Web.WebPages.Razor, Version=2.0.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35"> <section name="host" type="System.Web.WebPages.Razor.Configuration.HostSection, System.Web.WebPages.Razor, Version=2.0.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35" requirePermission="false" /> <section name="pages" type="System.Web.WebPages.Razor.Configuration.RazorPagesSection, System.Web.WebPages.Razor, Version=2.0.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35" requirePermission="false" /> </sectionGroup> <host factoryType="System.Web.Mvc.MvcWebRazorHostFactory, System.Web.Mvc, Version=4.0.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35" /> <add assembly="System.Web.Mvc, Version=4.0.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35" />

点击Demo下载。

部署复杂的项目依然问题多多,路漫漫···

System.DllNotFoundException
libdl
Description: HTTP 500.Error processing request.
Details: Non-web exception.
Exception stack trace:
at (wrapper managed-to-native) ZeroMQ.lib.Platform+Posix:dlopen (intptr,int)
at ZeroMQ.lib.Platform+Posix.OpenHandle (System.String fileName) <0x41ad8800 + 0x00027> in <filename unknown>:0
at ZeroMQ.lib.Platform+Posix.LoadUnmanagedLibrary (System.String libraryName) <0x41ad8070 + 0x001e7> in <filename unknown>:0
at ZeroMQ.lib.zmq..cctor () <0x41ad6000 + 0x01070> in <filename unknown>:0

宇内大大指点在mono的配置文件/etc/mono/config中添加一行:

<dllmap dll="libdl" target="libdl.so.2" os="!windows"/>

这个问题就过了,接下来的新问题:

System.DllNotFoundException
libzmq.so: cannot open shared object file: No such file or directory Description: HTTP 500.Error processing request.
Details: Non-web exception.
Exception stack trace:

在容器中先后找到libzmq.so的文件和将要放置的位置

root@0780a91692aa:/# find / -name libzmq.so
/var/www/mvc/bin/amd64/libzmq.so
/var/www/mvc/bin/i386/libzmq.so
root@0780a91692aa:/# find / -name libdl.so.2
/lib/x86_64-linux-gnu/libdl.so.2
root@0780a91692aa:/# cp /var/www/mvc/bin/amd64/libzmq.so /lib/x86_64-linux-gnu/
root@0780a91692aa:/# ldconfig
root@0780a91692aa:/# find / -name libzmq.so
/lib/x86_64-linux-gnu/libzmq.so
/var/www/mvc/bin/amd64/libzmq.so
/var/www/mvc/bin/i386/libzmq.so
root@0780a91692aa:/# /usr/jexus/jws restart
Restarting ... OK

发现问题又变了,也就是这关算过了

System.DllNotFoundException
/lib/x86_64-linux-gnu/libc.so.6: version `GLIBC_2.15' not found (required by /lib/x86_64-linux-gnu/libzmq.so) Description: HTTP 500.Error processing request.
Details: Non-web exception.
Exception stack trace:

先查看一下容器中系统的ldd版本

root@0780a91692aa:/# ldd --version
ldd (Debian EGLIBC 2.13-38+deb7u10) 2.13
Copyright (C) 2011 Free Software Foundation, Inc.
This is free software; see the source for copying conditions. There is NO
warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
Written by Roland McGrath and Ulrich Drepper.

发现比要求的版本要低,尝试升级系统

root@0780a91692aa:/# apt-get update
Hit http://download.mono-project.com wheezy/snapshots/4.2.3.4 Release.gpg
Hit http://download.mono-project.com wheezy/snapshots/4.2.3.4 Release
Hit http://download.mono-project.com wheezy/snapshots/4.2.3.4/main amd64 Packages
Hit http://httpredir.debian.org wheezy Release.gpg
Hit http://httpredir.debian.org wheezy-updates Release.gpg
Hit http://httpredir.debian.org wheezy Release
Hit http://security.debian.org wheezy/updates Release.gpg
Hit http://httpredir.debian.org wheezy-updates Release
Hit http://security.debian.org wheezy/updates Release
Hit http://security.debian.org wheezy/updates/main amd64 Packages
Hit http://httpredir.debian.org wheezy/main amd64 Packages
Hit http://httpredir.debian.org wheezy-updates/main amd64 Packages
Reading package lists... Done
W: Conflicting distribution: http://download.mono-project.com wheezy/snapshots/4.2.3.4 Release (expected wheezy/snapshots but got wheezy)
root@0780a91692aa:/# apt-get upgrade
Reading package lists... Done
Building dependency tree
Reading state information... Done
0 upgraded, 0 newly installed, 0 to remove and 0 not upgraded.
root@0780a91692aa:/# apt-get dist-upgrade
Reading package lists... Done
Building dependency tree
Reading state information... Done
Calculating upgrade... Done
0 upgraded, 0 newly installed, 0 to remove and 0 not upgraded.
root@0780a91692aa:/# ldd --version
ldd (Debian EGLIBC 2.13-38+deb7u10) 2.13
Copyright (C) 2011 Free Software Foundation, Inc.
This is free software; see the source for copying conditions. There is NO
warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
Written by Roland McGrath and Ulrich Drepper.

发现ldd的版本并没有发生改变,叼了···宇内大大的意思是在debian7中重新编译 zeroQM。我不知道怎么搞,直接重新构建个新镜像得了。Dockerfile内容如下:

FROM ubuntu:14.04

MAINTAINER Mongo <willem@xcloudbiz.com>

RUN apt-get update \
&& apt-get install -y curl \
&& rm -rf /var/lib/apt/lists/* RUN sudo apt-key adv --keyserver hkp://keyserver.ubuntu.com:80 --recv-keys 3FA7E0328081BFF6A14DA29AA6A19B38D3D831EF RUN echo "deb http://download.mono-project.com/repo/debian wheezy-apache24-compat main" | sudo tee -a /etc/apt/source$
&& sudo apt-get update \
&& apt-get install -y mono-devel \
&& rm -rf /var/lib/apt/lists/* RUN cd /opt
RUN apt-get update
RUN apt-get -y upgrade
RUN apt-get -y install wget
RUN wget linuxdot.net/down/jexus-5.8.1.tar.gz
RUN tar -zxvf jexus-5.8.1.tar.gz
RUN ./jexus-5.8.1/install
RUN rm jexus-5.8.1.tar.gz ENV SITE_CONF /usr/jexus/siteconf COPY default $SITE_CONF/default EXPOSE 80 RUN apt-get -y install vim
#CMD /usr/jexus/jws start && tail -f

结果

···
Processing triggers for libc-bin (2.19-0ubuntu6.7) ...
---> 95aa70915ed3
Removing intermediate container 4dcdd097c9df
Successfully built 95aa70915ed3

跑起来又是坑

System.MissingMethodException
Method not found: 'System.Web.HttpApplication.RegisterModule'. Description: HTTP .Error processing request.
Details: Non-web exception. Exception origin (name of application or object): mscorlib.
Exception stack trace:
at (wrapper managed-to-native) System.Reflection.MonoMethod:InternalInvoke (System.Reflection.MonoMethod,object,object[],System.Exception&)
at System.Reflection.MonoMethod.Invoke (System.Object obj, BindingFlags invokeAttr, System.Reflection.Binder binder, System.Object[] parameters, System.Globalization.CultureInfo culture) [0x00000] in <filename unknown>:

经过查找资料才发现这是Mono早期版本的BUG,而查看了一下通过Dockerfile安装的mono版本才发现是3.2.8,看来需要修改下Dockerfile了。

FROM ubuntu:14.04

MAINTAINER Mongo <willem@xcloudbiz.com>

RUN apt-get update
RUN apt-get -y upgrade
RUN sudo apt-get -y install build-essential automake autoconf bison gettext libtool libgli$
RUN sudo apt-get -y install libgif-dev libtiff4-dev libpng12-dev libexif-dev libx11-dev li$ RUN cd /opt
RUN apt-get -y install wget
RUN wget http://download.mono-project.com/sources/mono/mono-4.4.0.122.tar.bz2
RUN tar jxvf mono-4.4.0.122.tar.bz2
RUN cd mono-4.4. && ./configure --prefix=/usr && make && make install RUN apt-get update
RUN apt-get -y upgrade
RUN wget linuxdot.net/down/jexus-5.8..tar.gz
RUN tar -zxvf jexus-5.8..tar.gz
RUN ./jexus-5.8./install
RUN rm jexus-5.8..tar.gz ENV SITE_CONF /usr/jexus/siteconf COPY default $SITE_CONF/default EXPOSE #RUN apt-get autoremove -y --purge build-essential automake autoconf bison gettext libtool$ RUN apt-get -y install vim
#CMD /usr/jexus/jws start && tail -f

结尾类似下面就代表成功了。

···
update-alternatives: using /usr/bin/vim.basic to provide /usr/bin/ex (ex) in auto mode
update-alternatives: using /usr/bin/vim.basic to provide /usr/bin/editor (editor) in auto mode
Processing triggers for libc-bin (2.19-0ubuntu6.) ...
---> 48d13a183661
Removing intermediate container 8b7d3f4b1198
Successfully built 48d13a183661

但是运行起来又有了新问题:

System.InvalidOperationException
The view 'Index' or its master was not found or no view engine supports the searched locations. The following locations were searched:
~/Areas/HelpPage/Views/Help/Index.aspx
~/Areas/HelpPage/Views/Help/Index.ascx
~/Areas/HelpPage/Views/Shared/Index.aspx
~/Areas/HelpPage/Views/Shared/Index.ascx
~/Views/Help/Index.aspx
~/Views/Help/Index.ascx
~/Views/Shared/Index.aspx
~/Views/Shared/Index.ascx
~/Areas/HelpPage/Views/Help/Index.cshtml
~/Areas/HelpPage/Views/Help/Index.vbhtml
~/Areas/HelpPage/Views/Shared/Index.cshtml
~/Areas/HelpPage/Views/Shared/Index.vbhtml
~/Views/Help/Index.cshtml
~/Views/Help/Index.vbhtml
~/Views/Shared/Index.cshtml
~/Views/Shared/Index.vbhtml Description: HTTP .Error processing request.
Details: Non-web exception. Exception origin (name of application or object): System.Web.Mvc.
Exception stack trace:
at System.Web.Mvc.ViewResult.FindView (System.Web.Mvc.ControllerContext context) <0x4086a8e0 + 0x002fb> in <filename unknown>:
at System.Web.Mvc.ViewResultBase.ExecuteResult (System.Web.Mvc.ControllerContext context) <0x4086a630 + 0x000fc> in <filename unknown>:
at System.Web.Mvc.ControllerActionInvoker.InvokeActionResult (System.Web.Mvc.ControllerContext controllerContext, System.Web.Mvc.ActionResult actionResult) <0x4083a390 + 0x0001d> in <filename unknown>:
at System.Web.Mvc.ControllerActionInvoker+<>c__DisplayClass1a.<InvokeActionResultWithFilters>b__17 () <0x4083a310 + 0x0001f> in <filename unknown>:
at System.Web.Mvc.ControllerActionInvoker.InvokeActionResultFilter (IResultFilter filter, System.Web.Mvc.ResultExecutingContext preContext, System.Func` continuation) <0x4083a030 + 0x000d7> in <filename unknown>:

待续···

Mono+Jexus部署C# MVC的各种坑的更多相关文章

  1. mono+jexus 部署Asp.Net Mvc5之CompilationException2

    好不容易在ubuntu上搭建了mono+jexus,欣喜若狂的部署上发布的网站,急忙打开,成功运行. 但是别高兴的太早,当我打开WebApi帮助页时出现了CompilationException. 一 ...

  2. mono+jexus 部署之CompilationException

    使用 HelpPage 组件 CompilationException 好不容易在ubuntu上搭建了mono+jexus,欣喜若狂的部署上发布的网站,急忙打开,成功运行. 但是别高兴的太早,当我打开 ...

  3. ubuntu Mono+Jexus 部署到 ASP.NET MVC 5

    之前搞了很多次都是卡在了razor那个异常哪里,今天心血来潮就在试一试,一试竟然成功了,激动的我赶紧记录下历程.废话不说,走起... ubuntu 16.04 安装mono(最新版 5.14.0) 官 ...

  4. Linux(CentOS)中使用Mono+jexus部署Asp.net4.5网站

    一.效果: 二.安装步骤: 1.安装系统CentOS,我这是用CentOs7测试的. 2.接下来安装libgdiplus.Mono.Jexus有问题可以参考安装工具的官网: Libgdiplus下载官 ...

  5. MONO Jexus部署最佳体验

    根据我的测试和得到的反馈意见,目前几个月内开发跨平台的asp.net企业应用,应该在这个范围内进行:mono版本:3.2.8 (或3.2.7)Jexus版本:5.5.1(或5.5)MVC版本:1.2. ...

  6. Mono+Jexus部署Web页面

    一.web页面 二.Jexus默认站点的配置文件(只需修改站点路径) ###################### # Web Site: Default ###################### ...

  7. ASP.NET Linux部署(2) - MS Owin + WebApi + Mono + Jexus

    ASP.NET Linux部署(2) - MS Owin + WebApi + Mono + Jexus 本文承接我的上一篇博文: ASP.NET 5 Linux部署,那篇文章主要是针对最新的ASP. ...

  8. CentOS Mono Nginx 部署 MVC4+WebApi

    CentOS Mono Nginx 部署 MVC4+WebApi 经过几天的折磨,终于在CentOS上成功部署了MVC4+WebApi.Mono上的服务器推荐两种:Jexus(国产高人写的一款很牛的服 ...

  9. Mono+Jexus让C#运行在Linux(centos7_x64),学习笔记

    .h2cls { background: #6fa833 none repeat scroll 0 0 !important; color: #fff; font-family: "微软雅黑 ...

随机推荐

  1. iOS二维码生成、识别、扫描等

    二维码扫描 前言: 最近的项目中使用到了二维码,二维码这个模块功能也完成:觉得还是有必要总结一下用来做记录.好长时间没有写二维码了都忘记在差不多了,重新拾起来还是挻快的. 二维码使用场景: 生活中有很 ...

  2. 转:聊聊mavenCenter和JCenter

    Gradle支持从maven中央仓库和JCenter上获取构件,那这两者有什么区别呢? maven中央仓库(http://repo1.maven.org/maven2/)是由Sonatype公司提供的 ...

  3. 操作系统篇-hello world(免系统运行程序)

     || 版权声明:本文为博主原创文章,未经博主允许不得转载. 一.前言     今天起开始分享关于操作系统的相关知识,本人也是菜鸟一个,正处于学习阶段,这整个操作系统篇也是我边学习边总结的一些结果,希 ...

  4. Redis百亿级Key存储方案(转)

    1 需求背景 该应用场景为DMP缓存存储需求,DMP需要管理非常多的第三方id数据,其中包括各媒体cookie与自身cookie(以下统称supperid)的mapping关系,还包括了supperi ...

  5. [原] Cgroup CPU, Blkio 测试

    关于Cgroup的简单测试 [toc] 简单介绍Cgroup (如果对cgroup熟悉可以忽略) 一般情况下,cgroup挂载到一个虚拟文件目录,然后可以通过文件系统的API对其操作. ># m ...

  6. .NET应用程序域

    在.NET平台下,可执行程序并没有直接承载在Windows进程中,而非托管程序是直接承载的..NET可执行程序承载在进程的一个逻辑分区中,称之为应用程序域(AppDomain).一个进程可以包含多个应 ...

  7. 【开发软件】 在Mac下配置php开发环境:Apache+php+MySql

    本文地址 原文地址   本文提纲: 1. 启动Apache 2. 运行PHP 3. 配置Mysql 4. 使用PHPMyAdmin 5. 附录   有问题请先 看最后的附录   摘要: 系统OS X ...

  8. Node.js学习笔记——Node.js开发Web后台服务

    一.简介 Node.js 是一个基于Google Chrome V8 引擎的 JavaScript 运行环境.Node.js 使用了一个事件驱动.非阻塞式 I/O 的模型,使其轻量又高效.Node.j ...

  9. vue.js几行实现的简单的todo list

    序:目前前端框架如:vue.react.angular,构建工具fis3.gulp.webpack等等...... 可谓是五花八门,层出不穷,眼花缭乱...其实吧只要你想玩还是可以玩玩的..下面是看了 ...

  10. Android中点击事件的实现方式

    在之前博文中多次使用了点击事件的处理实现,有朋友就问了,发现了很多按钮的点击实现,但有很多博文中使用的实现方式有都不一样,到底是怎么回事.今天我们就汇总一下点击事件的实现方式. 点击事件的实现大致分为 ...