2016-12-09 2 views
0

Главная страница сайта heroku связана с несуществующей страницей github, поэтому я не могу ее использовать. https://elements.heroku.com/buttons/herokumx/herokumxnet https://github.com/herokumx/herokumxnetРазвертывание .NET для Heroku - сборка не создает файл проекта xproj.metaproj

Я нашел много SO сообщений, ссылающихся на этой сборки пакета и приложения. https://github.com/jincod/dotnetcore-buildpack https://github.com/jincod/AspNet5DemoApp

Я попытался развернуть полностью неизмененной версию выше приложения (вы можете повторить это самостоятельно), но процесс сборки не может без каких-либо специфических ошибок. Вот журнал развертывания.

Он жалуется, что не может найти xproj.metaproj, который из того, что я прочитал, представляет собой динамически созданный метапроект. Обычно используется на серверах сборки. Поэтому я предполагаю, что процесс сборки в какой-то момент не работает, но я понятия не имею, где и как. Есть ли что-нибудь, что я могу добавить в сборку для получения более конкретных ошибок сборки?

Я пробовал несколько раз со свежими клонами/используя их встроенную систему шаблонов, однако я всегда получаю ту же ошибку сборки.

Это ошибка? Или я делаю что-то неправильно?

... 
remote: APT packages Installled 
remote: Installing dotnet 
remote: 
remote: Welcome to .NET Core! 
remote: --------------------- 
remote: Learn more about .NET Core @ https://aka.ms/dotnet-docs. Use dotnet 
--he lp to see available commands or go to https://aka.ms/dotnet-cli-docs. 
remote: 
remote: Telemetry 
remote:-------------- 
remote: The .NET Core tools collect usage data in order to improve your experien ce. The data is anonymous and does not include commandline arguments. The data i s collected by Microsoft and shared with the community. remote: You can opt out of telemetry by setting a DOTNET_CLI_TELEMETRY_OPTOUT en vironment variable to 1 using your favorite shell. remote: You can read more about .NET Core tools telemetry @ https://aka.ms/dotne t-cli-telemetry. 
remote: 
remote: Configuring... 
remote: ------------------- 
remote: A command is running to initially populate your local package cache, to improve restore speed and enable offline access. This command will take up to a minute to complete and will only happen once. remote: Decompressing 100% 2659 ms 
remote: Expanding 100% 8029 ms 
remote: /tmp/build_bb0646bd8303182f6bd73ce264103dff/dotnet/sdk/1.0.0-preview5-00 4232/NuGet.targets(164,5): 
error MSB3202: The project file "/tmp/build_bb0646bd8 303182f6bd73ce264103dff/src/AspNet5DemoApp/AspNet5DemoApp.xproj.metaproj" was not found. [/tmp/build_bb0646bd8303182f6bd73ce264103dff/AspNet5DemoApp.sln] 
remote: !  Push rejected, failed to compile ASP.NET Core app. 
remote: 
remote: !  Push failed 
remote: Verifying deploy... 
remote: 
remote: !  Push rejected to ****. 
remote: 

Warning: Your console font probably doesn't support Unicode. If you experience strange characters in the output, consider switching to a TrueType font such as Consolas! To https://git.heroku.com/****.git ! 
[remote rejected] master -> master (pre-receive hook declined) error: failed to push some refs to 'https://git.heroku.com/****.git' 

Edit: Я попробовал эту сборку пакет, а с тем же не провалом ошибки http://github.com/heroku/dotnet-buildpack.git

remote: installing https://github.com/friism/mono-builder/releases/download/v4.0 
.1.44/mono-4.0.1.44.tar.gz 
remote: !  Push rejected, failed to compile ASP.NET 5 app. 

edit2: Пробовал копировать сценарий сборки на окнах, используя один и тот же файл проекта и т.д., и этим все компилирует хорошо.

dotnet publish project.json --output pathtoproject\heroku-output\ --configuration Release 
Publishing AspNet5DemoApp for .NETCoreApp,Version=v1.0 
Project AspNet5DemoApp (.NETCoreApp,Version=v1.0) will be compiled because expected outputs are missing 
Compiling AspNet5DemoApp for .NETCoreApp,Version=v1.0 

Compilation succeeded. 
    0 Warning(s) 
    0 Error(s) 

Time elapsed 00:00:02.4511992 

publish: Published to ...\heroku-output\ 
Published 1/1 projects successfully 

Редактировать 3: Я отредактировал сборку для добавления - - подробные, но без изменений в выходе. Есть ли какой-то поток, который мне нужен для подачи вывода, чтобы я мог читать любые возможные ошибки?

ответ

1

Я использовал nolar's buildpack, чтобы успешно получить минимальное ядро ​​.net core приложение в рабочем состоянии.

Шаги:

1: Найти папку, дом вашей GIT сделок РЕПО в

2:. RightClick -> Git Bash Вот на этой папке.

3: Heroku создать приложение-имя мое --buildpack https://github.com/noliar/dotnet-buildpack.git

4: Ответ должен дать вам GIT URL, клонировать его:

$ git clone https://git.heroku.com/my-app-name.git 

5: Копировать и вставьте файл project.json и Program.cs в корневую папку my-app-name . Содержание project.json:

{ 
    "version": "1.0.0-*" 
    , 
    "buildOptions": 
    { 
     "debugType": "portable" 
     , 
     "emitEntryPoint": true 
    } 
    , 
    "dependencies": {} 
    , 
    "frameworks": 
    { 
     "netcoreapp1.0": 
     { 
      "dependencies": 
      { 
       "Microsoft.NETCore.App": 
       { 
        "type": "platform", 
        "version": "1.0.0" 
       } 
       , 
       "Microsoft.AspNetCore.Server.Kestrel":"1.0.0" 
      } 
      , 
      "imports": "dnxcore50" 
     } 
    } 
} 

Содержание Program.cs: На основе минимальной осины.net core app tutorial здесь: http://ardalis.com/the-minimal-aspnet-core-app С дополнениями , чтобы получить приложение, чтобы связать правильный порт.

//using System; 
using Microsoft.AspNetCore.Hosting; 
using Microsoft.AspNetCore.Builder; 
using Microsoft.AspNetCore.Http; 

//////////////////////////////////////////////////////////////// 
//https://msdn.microsoft.com/en-us/library/system.environmentvariabletarget(v=vs.110).aspx 
// This example demonstrates the 
//  Environment.GetEnvironmentVariable, 
//  Environment.SetEnvironmentVariable, and 
//  Environment.GetEnvironmentVariables overloaded methods. 
using System; 
using System.Collections; 
using Microsoft.Win32; 
//////////////////////////////////////////////////////////////// 

using System.Linq; //<--to get string[].First extention 

namespace ConsoleApplication 
{ 
    ///<summary> 
    ///This class stores the url that the heroku app will launch on. 
    ///It also stores a debug message variable that we can print out 
    ///to the application. 
    ///</summary> 
    public class UrlData 
    { 
     /// <summary> The url in format such as "http://localhost:5000" 
     /// that the application will attach to. </summary> 
     public string url = null; 

     /// <summary> A debug message that will give us some insight into what happened 
     /// in the function that produced the .url component of the UrlData. </summary> 
     public string debug_message = "[DEBUG_MSG_NOT_SET]"; 
    } 

    public class Program 
    { 

     public static UrlData 
     GetUrl(string[] args) 
     { 
      //inn=="arguments inputs by priority" 
      string[] inn = new string[3]; //3 elements. 

      //inn[0] = "[NOTHING_FOUND]"; 
      inn[0] = String.Join(" | ", args); 

      //NOTE: Using "$PORT" and "PORT" both will cause crash on heroku: 
      inn[1] = Environment.GetEnvironmentVariable("$PORT"); //with "$" 
      //inn[2] = Environment.GetEnvironmentVariable("PORT"); //NO "$" 


      //Get first non-null and non-empty entry in array: 
      String dyna_port = null; 
      if(true == String.IsNullOrEmpty(inn[0])){ 
       //Simple processing: 
       dyna_port = inn.FirstOrDefault(s => !string.IsNullOrEmpty(s)); 
      }else{ 
       //Parse the command line args: 
       //Which will look like: 
       // --server.urls | 5001 | 5002 | 5003 
       string[] port_args = inn[0].Split('|'); 
       string port_arg_name = port_args[0]; 
       dyna_port = port_args[1]; 
      } 


      String port_num = (String.IsNullOrEmpty(dyna_port)) ? 
           "4998" : dyna_port; 

      String use_url = "[NOT_SET_USE_URL]"; 
      if(port_num.Contains("http")){ 
       //The command-line likely injected an argument like: 
       //"http://5000:80" for the port to use. 
       use_url = port_num; 
      }else{ 
       //The command-line likely injected an argument like: 
       //"5000" for the server.urls. 
       //Interpret it as "Port #5000" 
       use_url = "http://localhost:" + port_num; 
      } 

      //res_msg == "response message" 
      String nl = "\n"; 
      String res_msg = "[Working From Port#]:" + port_num + nl + 
          "|inn[0]=="    + inn[0] + nl + 
          "|inn[1]=="    + inn[1] + nl + 
          "|inn[2]=="    + inn[2] ; 

      UrlData results = new UrlData(); 
      results.url = use_url; 
      results.debug_message = res_msg; 

      return results; 
     } 

     public static void Main(string[] args) 
     { 
      //Step#1: Get Url to operate on: 
      UrlData ud = GetUrl(args); //ud=="url + debug-message" 

      //Uncondensed Version, so you can see what classes are being 
      //Used where in the chaining: 
      Microsoft.AspNetCore.Hosting.WebHostBuilder w1; 
      Microsoft.AspNetCore.Hosting.IWebHostBuilder w2; 
      Microsoft.AspNetCore.Hosting.IWebHostBuilder w2_5; //2_5 == 2.5 
      Microsoft.AspNetCore.Hosting.IWebHostBuilder w3; 
      Microsoft.AspNetCore.Hosting.IWebHost  w4; 

      w1 = new WebHostBuilder(); 
      w2 = w1.UseKestrel(); 
      w2_5 = w2.UseUrls(ud.url); 

      w3 = w2_5.Configure(
       a => a.Run(c => c.Response.WriteAsync(ud.debug_message)) 
      ); 

      w4 = w3.Build(); 
      w4.Run(); 

      Console.WriteLine("[HELLO_WORLD]"); 
     } 
    } 
} 

Примечание: Много этого кода очень грязный и экспериментальный. Но это будет сборка. И иметь что-то работать всегда приятно.

Шаг 6:

На мерзавца Баш:

$ git add . 

$ git commit 

$ dotnet restore 

$> dotnet run 

ПРИМЕЧАНИЕ: Если у вас нет консоли .NET установлены для командной строки, вы будете нуждаться в этом. Очень важно убедиться, что ваши приложения правильно компилируются, прежде чем пытаться их подтолкнуть. Это упрощает поиск неисправностей .

Шаг 7: Приложение должно теперь работать на localhost: 4998, если вы не настроили переменную окружения PORT на вашем локальном компьютере.

Шаг 8: Если он работает, идите вперед и выполните git push и проект должен быть успешно развернут. Другие советы: 1. Журналы Heroku - помогли мне разобраться, что случилось.

  1. Прочтите исходный код buildpack и найдите, где $ PORT - .

  2. Похоже, .net приложение не может получить доступ к переменной окружения $ PORT при работе на Heroku, поэтому порт должен быть введен через линию аргумент команды . Какую настройку выполняет noliar buildpack.

  3. Это сообщение парня помогло мне понять некоторые сценарии сборки, которые я использовал. Особенно линия:

dotnet run --server.urls http://+:8080 

Статья здесь:

https://blog.jenyay.com/running-asp-net-core-in-heroku/ 

Надеется, что это помогло. Мне потребовалось много исследований, чтобы понять, что такое . На самом деле надеялся, что я смогу вернуться к вашему сообщению , чтобы найти ответ другим.

Кроме того, извините за отступ в коде C#. Мне пришлось взорвать его все, чтобы получить представление.

+0

Я действительно вернулся на лазурь, так как у меня не было времени, чтобы продолжить движение. Я бы попробовал это, но, к сожалению, у меня нет времени. Я приму свой ответ, хотя и очень подробный! Спасибо – rolls

+1

Я чувствую тебя. Я почти сломался и получил лазурный счет.Но я хотел, чтобы я мог сделать бесплатный портфель, который не требовал денег для поддержания. –