IronRuby を使用して Redmine を実行しようとした人はいますか? 出来ますか?
2 に答える
現時点では答えはNOだと思います...少し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 で実行するための無駄な努力の中で、私が発見したことの 1 つは、ロケール yaml ファイルの「field_done_ratio: % Done」のような行が例外をスローすることでした。「%」を削除すると、機能しました(または、少なくとも一歩先に進みました)。
(この 16 時間後にあきらめました。私の最後の障害は、localhost:3000/ へのアクセス中の無限のリダイレクトでした。ただし、localhost:3000/login へのアクセスはうまくいきましたが、その後は何もできませんでした..)
http://ironruby.codeplex.com/workitem/list/basic?size=2147483647
数か月前に Redmine を IronRuby で実行しようとしましたが、ある程度成功しました。私が使用した Redmine のバージョンは 0.9.3、IronRuby のバージョンは 1.0v4、SQL Server 2005 で、IIS 6 からホストされていました。一連の Redmine ファイルに小さな変更を加える必要がありました。また、new_rails_defaults.rb など、ダウンロードに含まれていなかったファイルもいくつか追加しました。さらに、GitHub から IronRuby のソースを取得し、IronRack を機能させるために少し変更する必要がありました。
IIS を機能させるには、作成した Redmine IIS WebApplication で処理するために、すべてのトラフィックを .Net にリダイレクトする必要がありました。これは、「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 で動作させることは可能ですが、いくつかの変更なしでは動作しません。