9

有没有人尝试过使用 IronRuby 运行 Redmine?是否可以?

4

2 回答 2

5

我认为目前的答案是否定的......做一些谷歌搜索我发现各种各样的人问一些尝试和一些提出的问题......

https://serverfault.com/questions/165539/redmine-in-ironruby

目前,Redmine 仅在 Ruby 1.8.6 和 1.8.7 以及 Ruby Enterprise Edition 上受支持。目前正在努力让 Redmine 在 jRuby 和 Rubinius 上运行。由于运行 Windows 的核心开发人员并不多,我不会假设有人积极致力于 IronRuby 兼容性。如果您愿意提供帮助并编写所需的补丁程序,欢迎您在http://redmine.org上发表意见。

Redmine,yaml文件中不能有%..

在我为使 redmine 在 IronRuby 上运行而进行的徒劳无功的努力中,我发现其中一件事是语言环境 yaml 文件中的以下行:“field_done_ratio: % Done”引发了异常。如果我删除了“%”,它就起作用了(或者至少我更进一步)。

(在这 16 小时后放弃了,我的最后一个障碍是访问 localhost:3000/ 时的无限重定向,虽然访问 localhost:3000/login 很顺利,但在那之后你什么也做不了..)

http://ironruby.codeplex.com/workitem/list/basic?size=2147483647

于 2010-12-17T12:01:57.910 回答
5

几个月前,我试图让 Redmine 在 IronRuby 上运行并取得了一些成功。我使用的 Redmine 版本是 0.9.3,IronRuby 版本是 1.0v4,SQL Server 2005,它是从 IIS 6 托管的。实际上,要让它运行起来需要做很多工作。我不得不对一堆 Redmine 文件进行细微的修改。我还添加了一些在我的下载中不存在的文件,例如 new_rails_defaults.rb。此外,我必须从 GitHub 获取 IronRuby 源代码并稍微修改它以使 IronRack 正常工作。

为了让 IIS 工作,我必须将所有流量重定向到 .Net,以便在我创建的 Redmine IIS WebApplication 中进行处理。这是通过将应用程序扩展映射添加到“C:\Windows\Microsoft.NET\Framework\v2.0.50727aspnet_isapi.dll”来完成的

然后,我在 Web.config 文件中将所有流量重定向到 IronRack。

<httpHandlers>
<clear />   
<add path="*" verb="*" type="IronRuby.Rack.HttpHandlerFactory, IronRuby.Rack"/></httpHandlers>

这使 IIS 无法提供静态文件。为了解决这个问题,我创建了 StaticFileHttpHandler。

using System;
using System.Collections.Generic;
using System.IO;
using System.Linq;
using System.Text;
using System.Web;

namespace StaticFileHttpHandler
{
    public class StaticFileHttpHandler : IHttpHandler 
    {
        #region IHttpHandler Members

        public bool IsReusable
        {
            get 
            { 
                return true; 
            }
        }

        public void ProcessRequest(HttpContext context)
        {
            string staticFileUrl = context.Request.Url.LocalPath.Replace(@"/", @"\");
            string staticFilePath = context.Server.MapPath(@"~\..\..\");
            string defaultStaticFilePathForRemapping = @"\Redmine\public";
            string defaultRootDirectoryForRemapping = @"\Redmine";
            bool remapImage = !string.IsNullOrWhiteSpace(context.Request.QueryString.ToString());

            if (staticFilePath.EndsWith(@"\"))
            {
                staticFilePath = staticFilePath.Substring(0, staticFilePath.Length - 1);
            }

            if (remapImage)
            {
                staticFilePath += (defaultStaticFilePathForRemapping + staticFileUrl.Replace(defaultRootDirectoryForRemapping, ""));
            }
            else
            {
                staticFilePath += staticFileUrl;
            }

            if (File.Exists(staticFilePath))
            {
                context.Response.ContentType = GetMimeType(staticFilePath);
                context.Response.TransmitFile(staticFilePath);
            }
            else
            {
                context.Response.ContentType = "text/plain";
                context.Response.Write("The File Does Not Exist!!! File: " + staticFilePath);
            }            

            context.Response.Flush();
            context.ApplicationInstance.CompleteRequest();
        }

        // Found Here: http://kseesharp.blogspot.com/2008/04/c-get-mimetype-from-file-name.html
        private string GetMimeType(string fileName)
        {
            string mimeType = "application/unknown";
            string ext = System.IO.Path.GetExtension(fileName).ToLower();

            Microsoft.Win32.RegistryKey regKey = Microsoft.Win32.Registry.ClassesRoot.OpenSubKey(ext);

            if (regKey != null && regKey.GetValue("Content Type") != null)
            {
                mimeType = regKey.GetValue("Content Type").ToString();
            }

            return mimeType;
        }

        #endregion
    }
}

这也需要添加到 httpHandlers 部分。对于您希望它能够服务的每种静态文件类型。下面显示了一个提供 PNG 文件的示例。

<httpHandlers>
<clear />
<add path="*.png" verb="*" type="StaticFileHttpHandler.StaticFileHttpHandler, StaticFileHttpHandler"/>
<add path="*" verb="*" type="IronRuby.Rack.HttpHandlerFactory, IronRuby.Rack"/></httpHandlers>

我还需要制作一个 images_controller.rb 文件来指向静态文件。

# This is a place holder controller to allow for mapping static images

class ImagesController < ApplicationController
  def index
    0
  end
end

接下来,所有 *.yml 文件都需要在带有百分号的值周围加上双引号。

  field_done_ratio: "% ???????"

此外,我必须在 db\migrate 文件夹中的数据库设置文件中注释掉所有索引的创建和删除。

总之,可以让 Redmine 主要与 IronRuby、IronRack、IIS 6 和 SQL Server 2005 一起工作,但并非没有一些修改。

于 2011-03-12T13:20:06.047 回答