Redmine с IronRuby (Windows)? - PullRequest
       17

Redmine с IronRuby (Windows)?

9 голосов
/ 06 мая 2010

Кто-нибудь пробовал запускать Redmine с помощью IronRuby? Возможно ли это?

Ответы [ 2 ]

5 голосов
/ 12 марта 2011

Я попытался запустить Redmine на IronRuby с некоторым успехом несколько месяцев назад. Версия Redmine, которую я использовал, была 0.9.3, версия IronRuby была 1.0v4, SQL Server 2005 и была размещена на IIS 6. На самом деле это была большая работа по ее запуску. Мне пришлось внести небольшие изменения в кучу файлов Redmine. Я также добавил несколько файлов, которых не было в моей загрузке, например new_rails_defaults.rb. Кроме того, мне пришлось получить исходный код IronRuby от GitHub и немного изменить его, чтобы заставить работать IronRack.

Чтобы заставить IIS работать, мне пришлось перенаправить весь трафик на .Net для обработки в созданном мною веб-приложении Redmine IIS. Это было сделано путем добавления сопоставления расширения приложения в «C: \ Windows \ Microsoft.NET \ Framework \ v2.0.50727aspnet_isapi.dll»

Затем я перенаправил весь трафик на IronRack в своем файле Web.config.

<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, но не без некоторых модификаций.

5 голосов
/ 17 декабря 2010

Я думаю, что ответ НЕТ в настоящее время ... делая небольшой поиск в Google, я нашел различные люди задают несколько попыток и поднимают вопросы ...

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 я обнаружил, что строки вроде: field_done_ratio:% Done в файлах локали yaml генерируют исключения. если я удалил «%», это сработало (или, по крайней мере, я пошел еще дальше).

(после этих 16 часов моим последним препятствием было бесконечное перенаправление при доступе к localhost: 3000 /, хотя доступ к localhost: 3000 / login прошел нормально, но после этого вы ничего не могли сделать ..)

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

...