一直想在 Linux 上使用 MONO 试试运行 Rafy,最近因为业务需要,总算是真正地试验了一次。下面是本次部署记录的一些要点。

Linux

这次部署,我是和两位同事一起来试验的。由于我们对 Linux 都不太熟悉(多年前曾经用过很少一段时间的 RedHat,那些命令现在也早已忘记了,哈。),所以我们三个分别测试了三个不同的镜像,最终选定了 OpenSUSE 的一个镜像。(其实,我下载了一个Ubuntu,才 800M,安装后老是有问题,不得不放弃,悲剧……)

相对于 Windows 来说,Linux 更轻量,安装很简单,安装速度也非常快。

ASP.NET vNext vs MONO

这两个是目前可行的 .NET 跨平台方案。我们需要快速理解两个方案,分析哪个方案的移植成本最低。

ASP.NET vNext

微软本身已经逐步支持开源了,所以我们的想法自然是尽量先用微软官方发布的跨平台方案。ASP.NET vNext(5) 目前已经发布了 RC1。但是经测试,发现整个代码构建于新的 API 之上,如果要把我们的程序移植到 vNext 之上,需要修改许多代码。所以暂时还是没有选择使用 vNext,但是长期看来,必然还是需要选择 VNext。

下面是 vNext 官网和其文档:

http://www.asp.net/vnext、https://docs.asp.net/en/latest/index.html

下面是一些 vNext 相关的系列教程:

《解读ASP.NET 5 & MVC6系列》、《ASP.NET 5系列教程》。

MONO

其实,目前来说,.NET 跨平台,大家用的比较多的还是 MONO。官网:http://www.mono-project.com/

MONO 可简单理解为跨平台的 .NET 平台,包括运行时、框架、工具。MONO 框架是 .NET 框架的重写版本,其 API 尽量保持与 .NET 框架一致,也支持 CLI 规范,所以上层的应用程序不需要重新编译,也可以直接运行在 MONO 上。所以直接使用 MONO 应该是成本最低的跨平台方案。

但是,MONO 并不支持完整的 .NET,例如 WPF、WWF 就没有在 MONO 上实现(详见:《兼容性对比》)。所以,我们可以使用一个工具来检测应用程序是否会有兼容性问题:“Mono Migration Analyzer”。

MONO 安装完成后,对其进行了测试,可正确运行即可:

Web Server

在 Linux 在运行 MONO 可以使用 Apache、Nginx 等作为 Web 服务器,见:《 MONO ASP.NET》、《mod_mono》。另外,国人编写的 Jexus 服务器也是比较流行的,对 .NET 支持非常好,用起来很简单。所以我们选择了最简单的 Jexus 服务器,降低学习的难度。

这里遇到了一个问题,Jexus 服务器使用的是 IIS 经典模式,导致网站 Web.config 中 <System.WebServer> 配置节不可用(该配置节用于 IIS 集成模式)。这里,需要把该配置节中的内容都修改到 <System.Web> 中对应的配置节即可。

最终运行环境

Linux(OpenSUSE)+MONO+Jexus+MVC5+Rafy+Oracle。

在上述环境中,程序总算可以运行了。

不过还是发现了很多的兼容性问题。比较多的情况是由于 Linux 是大小写敏感的,而 Windows 并不敏感,所以程序中大量的文件在 Linux 上‘找不到’。另外,Windows 中的路径分隔符是’\’,而 Linux 中是 ‘/’,也导致了一些问题。关于程序移植时考虑的内容,详见:《Application Portability》。

跨平台运行 Rafy 首次部署记录的更多相关文章

  1. hadoop记录-[Flink]Flink三种运行模式安装部署以及实现WordCount(转载)

    [Flink]Flink三种运行模式安装部署以及实现WordCount 前言 Flink三种运行方式:Local.Standalone.On Yarn.成功部署后分别用Scala和Java实现word ...

  2. 为首次部署MongoDB做好准备:容量计划和监控

    如果你已经完成了自己新的MongoDB应用程序的开发,并且现在正准备将它部署进产品中,那么你和你的运营团队需要讨论一些关键的问题: 最佳部署实践是什么? 为了确保应用程序满足它所必须的服务层次我们需要 ...

  3. Docker集中化web界面管理平台-Shipyard部署记录

    Docker图形页面管理工具基本常用的有三种: DOCKER UI,Shipyard,Portainer.对比后发现,Shipyard最强大,其次是Portainer,最后是Docker ui.之前介 ...

  4. Centos7.5基于MySQL5.7的 InnoDB Cluster 多节点高可用集群环境部署记录

    一.   MySQL InnoDB Cluster 介绍MySQL的高可用架构无论是社区还是官方,一直在技术上进行探索,这么多年提出了多种解决方案,比如MMM, MHA, NDB Cluster, G ...

  5. ProxySQL Cluster 高可用集群环境部署记录

    ProxySQL在早期版本若需要做高可用,需要搭建两个实例,进行冗余.但两个ProxySQL实例之间的数据并不能共通,在主实例上配置后,仍需要在备用节点上进行配置,对管理来说非常不方便.但是Proxy ...

  6. Centos7下ELK+Redis日志分析平台的集群环境部署记录

    之前的文档介绍了ELK架构的基础知识,日志集中分析系统的实施方案:- ELK+Redis- ELK+Filebeat - ELK+Filebeat+Redis- ELK+Filebeat+Kafka+ ...

  7. Redis哨兵模式(sentinel)学习总结及部署记录(主从复制、读写分离、主从切换)

    Redis的集群方案大致有三种:1)redis cluster集群方案:2)master/slave主从方案:3)哨兵模式来进行主从替换以及故障恢复. 一.sentinel哨兵模式介绍Sentinel ...

  8. Centos下SFTP双机高可用环境部署记录

    SFTP(SSH File Transfer Protocol),安全文件传送协议.有时也被称作 Secure File Transfer Protocol 或 SFTP.它和SCP的区别是它允许用户 ...

  9. Docker网络解决方案 - Calico部署记录

    简单来说,实现docker跨主机容器间通信,常用的第三方网络方案是Flannel,Weave,Calico:Flannel会为每个host分配一个subnet,容器从这个subnet中分配ip,这些i ...

随机推荐

  1. 带你实现开发者头条APP(三) 首页实现

    title: 带你实现开发者头条APP(三) 首页实现 tags: 轮播广告,ViewPager切换,圆形图片 grammar_cjkRuby: true --- 一.前言 今天实现开发者头条APP的 ...

  2. 一个表缺失索引发的CPU资源瓶颈案例

    背景 近几日,公司的应用团队反应业务系统突然变慢了,之前是一直比较正常.后与业务部门沟通了解详情,得知最近生意比较好,同时也在做大的促销活动,使得业务数据处理的量出现较大的增长,最终系统在处理时出现瓶 ...

  3. 新手学习web遇到的一些乱码问题

    在新手学习web网站学习的时候经常会遇到?????这种乱码,对于刚起步的菜鸟来说真的很头痛,很容易打击继续学的信心当然了对于菜鸟的我最近也遇到过乱码问题,沉浸其中不能自拔,爱的深啊!!!!!我所遇到的 ...

  4. Oozie分布式任务的工作流——Spark篇

    Spark是现在应用最广泛的分布式计算框架,oozie支持在它的调度中执行spark.在我的日常工作中,一部分工作就是基于oozie维护好每天的spark离线任务,合理的设计工作流并分配适合的参数对于 ...

  5. 2DToolkit官方文档中文版打地鼠教程(一):初始设置

    这是2DToolkit官方文档中 Whack a Mole 打地鼠教程的译文,为了减少文中过多重复操作的翻译,以及一些无必要的句子,这里我假设你有Unity的基础知识(例如了解如何新建Sprite等) ...

  6. ubuntu-14.04-server配置Jexus --安装步骤记录

    作者:郝喜路   个人主页:http://www.cnicode.com      博客地址:http://haoxilu.cnblogs.com 说明:我是Linux菜鸟,自己尝试配置Jexus服务 ...

  7. 【腾讯Bugly干货分享】聊聊苹果的Bug - iOS 10 nano_free Crash

    本文来自于腾讯Bugly公众号(weixinBugly),未经作者同意,请勿转载,原文地址:https://mp.weixin.qq.com/s/hnwj24xqrtOhcjEt_TaQ9w 作者:张 ...

  8. Flume1 初识Flume和虚拟机搭建Flume环境

    前言:       工作中需要同步日志到hdfs,以前是找运维用rsync做同步,现在一般是用flume同步数据到hdfs.以前为了工作简单看个flume的一些东西,今天下午有时间自己利用虚拟机搭建了 ...

  9. HTML&CSS日常知识点总结

    HTML 标签 meta 标签永远位于文档的头部,即head元素内部 可提供有关页面的元信息,如针对搜索引擎和更新频度的描述和关键词 charset 这个属性规定在外部脚本文件中使用的字符编码 如果外 ...

  10. PHP扩展-生命周期和内存管理

    1. PHP源码结构 PHP的内核子系统有两个,ZE(Zend Engine)和PHP Core.ZE负责将PHP脚本解析成机器码(也成为token符)后,在进程空间执行这些机器码:ZE还负责内存管理 ...