3

nopCommerceアプリケーションをAppHarborにデプロイしようとしています。

ただし、ページを開始すると、ランタイムリダイレクトループが発生します。デバッグログを少し追加しましたが、問題はGlobal.asax.cs-> PreventDatabaseIsInstalled()のこの部分にあるようです。

if (!webHelper.GetThisPageUrl(false).StartsWith(installUrl, StringComparison.InvariantCultureIgnoreCase))
            {
                this.Response.Redirect(installUrl);
            }

GetThisPageUrlが返すため、StartsWithの比較は常にfalseです。 http://[name].apphb.com:14275/install

そしてinstallUrl(GetStoreLocation経由)は http://[name].apphb.com/install

誰かがnopCommerceをAppHarborで動作させることができましたか?

4

2 に答える 2

6

ポート番号を省略するには、nopCommerceを変更する必要があるようです。ソースをざっと見てみましたが、2つの解決策があるようです。

1)メソッドでブール引数をからfalseに変更するtrueと、メソッドはポート番号なしでURLを生成する別のブランチを選択するEnsureDatabaseIsInstalled必要があります。GetThisPageUrl

GetThisPageUrl2) ( "WebHelper.cs"の)メソッドのelseブランチを更新して、ポート番号を無視します。

最初の解決策を選択する方が簡単ですが、同様の問題が発生しないように、問題の中心にパッチを適用する方が適切です。

于 2011-12-25T17:48:20.807 に答える
2

@TroelsThomsenの修正に加えて、ベースコントローラーでラッパーを使用して、すべてのコードがポートの変更を許可しないようにします。

まず、Webhelper.cs:75の@TroelsThomsen修正

public virtual string GetThisPageUrl(bool includeQueryString, bool useSsl)
        {
            string url = string.Empty;
            if (_httpContext == null)
                return url;

            if (includeQueryString)
            {
                string storeHost = GetStoreHost(useSsl);
                if (storeHost.EndsWith("/"))
                    storeHost = storeHost.Substring(0, storeHost.Length - 1);
                url = storeHost + _httpContext.Request.RawUrl;
            }
            else
            {
#if DEBUG
                var uri = _httpContext.Request.Url;

#else
                //Since appharbor changes port number due to multiple servers, we need to ensure port = 80 as in AppHarborRequesWrapper.cs
                var uri = new UriBuilder
                {
                    Scheme = _httpContext.Request.Url.Scheme,
                    Host = _httpContext.Request.Url.Host,
                    Port = 80,
                    Path = _httpContext.Request.Url.AbsolutePath,
                    Fragment = _httpContext.Request.Url.Fragment,
                    Query = _httpContext.Request.Url.Query.Replace("?", "")
                }.Uri;
#endif
                url = uri.GetLeftPart(UriPartial.Path);
            }
            url = url.ToLowerInvariant();
            return url;
        }

つまり、 https: //gist.github.com/1158264からNop.Core\AppHarborにファイルを追加するだけです。

および変更されたベースコントローラー:

  • nopcommerce \ Presentation \ Nop.Web \ Controllers \ BaseNopController.cs

    public class BaseNopController : Controller
    {
        protected override void Initialize(RequestContext requestContext)
        {
            //Source: https://gist.github.com/1158264
            base.Initialize(new RequestContext(new AppHarborHttpContextWrapper(System.Web.HttpContext.Current),
                                               requestContext.RouteData));
        }
        //Same file from here downwards...
    }
    
  • nopcommerce \ Presentation \ Nop.Web.Admin \ Controllers \ BaseNopController.cs

    public class BaseNopController : Controller
    {
    protected override void Initialize(System.Web.Routing.RequestContext requestContext)
    {
        //set work context to admin mode
        EngineContext.Current.Resolve<IWorkContext>().IsAdmin = true;
    
        //Source: https://gist.github.com/1158264
        base.Initialize(new RequestContext(new AppHarborHttpContextWrapper(System.Web.HttpContext.Current), requestContext.RouteData));
    
        //base.Initialize(requestContext);
    }
        //Same file from here downwards...
    }
    
于 2012-04-08T16:40:15.730 に答える