跨平台运行 Rafy 首次部署记录
一直想在 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 首次部署记录的更多相关文章
- hadoop记录-[Flink]Flink三种运行模式安装部署以及实现WordCount(转载)
[Flink]Flink三种运行模式安装部署以及实现WordCount 前言 Flink三种运行方式:Local.Standalone.On Yarn.成功部署后分别用Scala和Java实现word ...
- 为首次部署MongoDB做好准备:容量计划和监控
如果你已经完成了自己新的MongoDB应用程序的开发,并且现在正准备将它部署进产品中,那么你和你的运营团队需要讨论一些关键的问题: 最佳部署实践是什么? 为了确保应用程序满足它所必须的服务层次我们需要 ...
- Docker集中化web界面管理平台-Shipyard部署记录
Docker图形页面管理工具基本常用的有三种: DOCKER UI,Shipyard,Portainer.对比后发现,Shipyard最强大,其次是Portainer,最后是Docker ui.之前介 ...
- Centos7.5基于MySQL5.7的 InnoDB Cluster 多节点高可用集群环境部署记录
一. MySQL InnoDB Cluster 介绍MySQL的高可用架构无论是社区还是官方,一直在技术上进行探索,这么多年提出了多种解决方案,比如MMM, MHA, NDB Cluster, G ...
- ProxySQL Cluster 高可用集群环境部署记录
ProxySQL在早期版本若需要做高可用,需要搭建两个实例,进行冗余.但两个ProxySQL实例之间的数据并不能共通,在主实例上配置后,仍需要在备用节点上进行配置,对管理来说非常不方便.但是Proxy ...
- Centos7下ELK+Redis日志分析平台的集群环境部署记录
之前的文档介绍了ELK架构的基础知识,日志集中分析系统的实施方案:- ELK+Redis- ELK+Filebeat - ELK+Filebeat+Redis- ELK+Filebeat+Kafka+ ...
- Redis哨兵模式(sentinel)学习总结及部署记录(主从复制、读写分离、主从切换)
Redis的集群方案大致有三种:1)redis cluster集群方案:2)master/slave主从方案:3)哨兵模式来进行主从替换以及故障恢复. 一.sentinel哨兵模式介绍Sentinel ...
- Centos下SFTP双机高可用环境部署记录
SFTP(SSH File Transfer Protocol),安全文件传送协议.有时也被称作 Secure File Transfer Protocol 或 SFTP.它和SCP的区别是它允许用户 ...
- Docker网络解决方案 - Calico部署记录
简单来说,实现docker跨主机容器间通信,常用的第三方网络方案是Flannel,Weave,Calico:Flannel会为每个host分配一个subnet,容器从这个subnet中分配ip,这些i ...
随机推荐
- 冒泡,setinterval,背景图的div绑定事件,匿名函数问题
1.会冒泡到兄弟元素么? $(function(){ $("#a").click(function(){alert("a")}) $("#b" ...
- .NET平台开源项目速览(16)C#写PDF文件类库PDF File Writer介绍
1年前,我在文章:这些.NET开源项目你知道吗?.NET平台开源文档与报表处理组件集合(三)中(第9个项目),给大家推荐了一个开源免费的PDF读写组件 PDFSharp,PDFSharp我2年前就看过 ...
- jQuery学习之路(8)- 表单验证插件-Validation
▓▓▓▓▓▓ 大致介绍 jQuery Validate 插件为表单提供了强大的验证功能,让客户端表单验证变得更简单,同时提供了大量的定制选项,满足应用程序各种需求.该插件捆绑了一套有用的验证方法,包括 ...
- PHP之时间和日期函数
// 时间日期函数 Time <?php date_default_timezone_set('UTC'); // 获取当前时间的时间戳 $time0 = mktime(); $time1 = ...
- AFNetworking 3.0 源码解读(十)之 UIActivityIndicatorView/UIRefreshControl/UIImageView + AFNetworking
我们应该看到过很多类似这样的例子:某个控件拥有加载网络图片的能力.但这究竟是怎么做到的呢?看完这篇文章就明白了. 前言 这篇我们会介绍 AFNetworking 中的3个UIKit中的分类.UIAct ...
- Javascript 代理模式模拟一个文件同步功能
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8&quo ...
- 使用EF CodeFirst 创建数据库
EntityFramework 在VS2015添加新建项时,选择数据->ADO.NET 实体数据模型,有一下选项 来自数据库的EF设计器,这个就是我们最常用的EntityFramework设计模 ...
- C语言中如何判断文件是否存在
方法一:access函数判断文件夹或者文件是否存在 函数原型: int access(const char *filename, int mode); 所属头文件:io.h filename:可以填写 ...
- Express 教程 01 - 入门教程之经典的Hello World
目录: 前言 一.Express?纳尼?! 二.开始前的准备工作 三.测试安装之经典的Hello World 四.使用express(1)来生成一个应用程序 五.说明 前言: 本篇文章是建立在Node ...
- 【swift】BlockOperation和GCD实用代码块
//BlockOperation // // ViewController.swift import UIKit class ViewController: UIViewController { @I ...