הפיתרון היה כך
sudo find / -name dotnet
זה הפלט
/home/ubuntu/.dotnet/dotnet
/etc/dotnet
תכל'ס איך מתקדמים?
הפיתרון היה כך
sudo find / -name dotnet
זה הפלט
/home/ubuntu/.dotnet/dotnet
/etc/dotnet
תכל'ס איך מתקדמים?
עכשיו הסרתי את גרסה 7 והנה כשאני מנסה שוב להריץ את הפקודה
./dotnet-install.sh --channel 3.1
הוא מודיע לי בחגיגיות ש
dotnet-install: .NET Core SDK with version '3.1.426' is already installed.
ואז כדי לוודא שיש לי dotnet 3 בהתרגשות אני כותב :
ubuntu@vps-XXX:~$ dotnet --info
והוא מחזיר לי:
-bash: /usr/bin/dotnet: No such file or directory
איך אפשר לוודא באמת מה מותקן ומה לא?
ניסיתי להתקין באמצעות
sudo apt-get install dotnet-sdk-3.1
ןקיבלתי את זה
Get:1 http://security.ubuntu.com/ubuntu lunar-security InRelease [109 kB]
Hit:2 http://nova.clouds.archive.ubuntu.com/ubuntu lunar InRelease
Hit:3 http://nova.clouds.archive.ubuntu.com/ubuntu lunar-updates InRelease
Hit:4 http://nova.clouds.archive.ubuntu.com/ubuntu lunar-backports InRelease
Fetched 109 kB in 1s (107 kB/s)
Reading package lists... Done
Reading package lists... Done
Building dependency tree... Done
Reading state information... Done
E: Unable to locate package dotnet-sdk-3.1
E: Couldn't find any package by glob 'dotnet-sdk-3.1'
E: Couldn't find any package by regex 'dotnet-sdk-3.1'
לכן ניסיתי את זה
ubuntu@vps-XXX:~$ sudo chmod +x ./dotnet-install.sh
ubuntu@vps-XXX:~$ ./dotnet-install.sh --channel 3.1
אבל כשאני מריץ
dotnet --info
אני מקבל
Host:
Version: 7.0.5
Architecture: x64
Commit: 8042d61b17
.NET SDKs installed:
No SDKs were found.
.NET runtimes installed:
Microsoft.AspNetCore.App 7.0.5 [/usr/lib/dotnet/shared/Microsoft.AspNetCore.App]
Microsoft.NETCore.App 7.0.5 [/usr/lib/dotnet/shared/Microsoft.NETCore.App]
Other architectures found:
None
Environment variables:
Not set
global.json file:
Not found
Learn more:
https://aka.ms/dotnet/info
Download .NET:
https://aka.ms/dotnet/download
עוד פלט רלוונטי
ubuntu@vps-XXX:~$ dotnet --list-sdks
ubuntu@vps-XXX:~$ dotnet --list-runtimes
Microsoft.AspNetCore.App 7.0.5 [/usr/lib/dotnet/shared/Microsoft.AspNetCore.App]
Microsoft.NETCore.App 7.0.5 [/usr/lib/dotnet/shared/Microsoft.NETCore.App]
בקיצור הוא על גרסה 7. אמשיך לעדכן...
@dovid כתב בתהליך העלאת מערכת fullstack מה-localhost לעולם האמיתי:
גם אם תישאר עם 3 אני חושב שהמדריך רלוונטי רק שבמקום לשים בפקודה dotnet-runtime-7.0 צריך לשים dotnet-runtime-3.1.
אז מה המשמעות של זה?
The following versions of .NET are
no longer supported:
.NET 5
.NET Core 3.1
.NET Core 3.0
.NET Core 2.2
.NET Core 2.1
.NET Core 2.0
שאין תמיכה במקרה של תקלות אבל בעצם זה אמור לעבוד?
@dovid כתב בתהליך העלאת מערכת fullstack מה-localhost לעולם האמיתי:
מזל טוב.
פרט יותר איפה אתה אוחז,
יש לך ביד שם וסיסמה, או שכבר הפלגת הלאה?
ברוכים תהיו.
יש שם משתמש וסיסמה וחיבור באמצעות Power shell. עדכנתי את המערכת. יש WinSCP תקין. מה הלאה?
אם הכיוון הוא כאן
יש לי בעיה שאין שם תמיכה ב-DOTNET 3, השאלה האם למישהו יש נסיון עם זה.
יש לי VPS שמריץ אובונטו. ייצרתי מפתחות SSH. מה כעת?
@dovid כתב בתהליך העלאת מערכת fullstack מה-localhost לעולם האמיתי:
אני לא מבין מה חסר בהודעתי הראשונה שאתה מייגע אותי בהרבה שאלות.
לא חסר כלום. לי חסר ניסיון ולכן אני אני בודק וחושש מעט לפני כל צעד.
@dovid כתב בתהליך העלאת מערכת fullstack מה-localhost לעולם האמיתי:
- בטוח לגמרי
- אני לא רוצה שתיקח מהם תכנית, הצעתי לך אותם בשביל שכירות של שרת וירטואלי (עם אובנטו).
זה הכיוון?
אם כן זה נראה שיש שם באמת אפשרות לאובונטו. עם דוקר או בלי?
מנסה את OVH.
@dovid כתב בתהליך העלאת מערכת fullstack מה-localhost לעולם האמיתי:
את התוכן של הdist אתה שופך לתיקיה הססטית של .net core (משהו כמו wwwroot נראה לי).
2. כן, בדרך כלל (החלק של האנגולר זה קבצים סטטיים, בעצם זה לא חייב להיות על אותו דומיין וגם לא על אותו שרת).
למה בעצם זה חשוב ל.net לדעת או לקחת אחריות על מיקום קבצי הקליינט? זה פשוט עניין של סדר וארגון או משהו יותר מהותי?
(אני מגיע מתפיסה שבה באמת אין שום קשר מהותי בין הקליינט לסרבר למעט ה-API)?
אתה אכן צריך דומיין, עדיף לך לא לקנות ישראלי מכמה סיבות (למשל זמן עדכון שרתים).
מה כוונתך "לא ישראלי"? שלא יהיה עם סיומת IL?
הדומיין פחות דחוף, אתה יכול לראות בד"כ את האתר עובד עם דומיין של החברה המארחת.
כלומר הדומיין הנוסף שאתה יכול לקנות הוא פשוט עניין שיווקי?
איזה אתריים זולים ואיכותיים יש שתומכים ב-.net אוטומטי? (אני מעוניין להתרשם מפערי המחירים).
אוקיי משתף אתכם בתהליך ולמי שיש הערות - יתקבלו בברכה
ממה שבדקתי צריך שני דברים להשיג\לקנות
לגבי שלב 1 כאן אפשר לבדוק ולקנות domain.
לפני שאני לוחץ על תשלום אני רוצה לוודא איתכם שאני לא פשוט מדבר שטויות וסתם שורף כסף. האם אני בכיוון הנכון?
אני מנסה לדעת מהם השלבים שעלי לבצע כדי להעלות אתר שבניתי לעולם האמיתי.
נתונים טכניים:
מדובר באתר פשוט ביותר (בסטייל hello world וזהו...) שבניתי באנגולר לצורך הדגמה זו.
יש לי צד שרת ב.net core (ראו כאן) המדגים תקשורת בסיסית בין הקליינט לשרת, וכמובן יש DB (גם זה מתואר בקישור לעיל).
ביצעתי על האנגולר ng build וקיבלתי תיקיית dist.
ביצעתי על צד השרת dotnet publish וזה הפלט שקיבלתי
uploadProj -> C:\Users\yaakov\source\repos\uploadProj\uploadProj\bin\Debug\netcoreapp3.1\uploadProj.dll
uploadProj -> C:\Users\yaakov\source\repos\uploadProj\uploadProj\bin\Debug\netcoreapp3.1\publish\
מקווה שתקין.
אני חדש בעניין אז ברשותכם כמה שאלות של מתחילים.
אשמח לכל מידע והמלצה שיעזרו לפוגג את הערפל.
תודה רבה.
תודה רבה זה עובד. אין כמוך.
נ.ב. עד מתי אמשיך ליפול ולשרוף שעות על השטויות הקטנות והקריטיות האלו???
עוד קצת מידע
אני מנסה את הכתובת הבאה
https://localhost:44345/api/Numbers/GetNumberFromServer
מתבצעת כניסה לקונטורולר
אבל השרת מקפיץ את השגיאה הנה מורחבת
Microsoft.Data.SqlClient.SqlException
HResult=0x80131904
Message=Cannot open database "Numbers" requested by the login. The login failed.
Login failed for user 'LAPTOP-QLS0D39V\yaakov'.
Source=Core Microsoft SqlClient Data Provider
StackTrace:
at Microsoft.Data.SqlClient.SqlInternalConnectionTds..ctor(DbConnectionPoolIdentity identity, SqlConnectionString connectionOptions, SqlCredential credential, Object providerInfo, String newPassword, SecureString newSecurePassword, Boolean redirectedUserInstance, SqlConnectionString userConnectionOptions, SessionData reconnectSessionData, Boolean applyTransientFaultHandling, String accessToken, DbConnectionPool pool, SqlAuthenticationProviderManager sqlAuthProviderManager)
at Microsoft.Data.SqlClient.SqlConnectionFactory.CreateConnection(DbConnectionOptions options, DbConnectionPoolKey poolKey, Object poolGroupProviderInfo, DbConnectionPool pool, DbConnection owningConnection, DbConnectionOptions userOptions)
at Microsoft.Data.ProviderBase.DbConnectionFactory.CreatePooledConnection(DbConnectionPool pool, DbConnection owningObject, DbConnectionOptions options, DbConnectionPoolKey poolKey, DbConnectionOptions userOptions)
at Microsoft.Data.ProviderBase.DbConnectionPool.CreateObject(DbConnection owningObject, DbConnectionOptions userOptions, DbConnectionInternal oldConnection)
at Microsoft.Data.ProviderBase.DbConnectionPool.UserCreateRequest(DbConnection owningObject, DbConnectionOptions userOptions, DbConnectionInternal oldConnection)
at Microsoft.Data.ProviderBase.DbConnectionPool.TryGetConnection(DbConnection owningObject, UInt32 waitForMultipleObjectsTimeout, Boolean allowCreate, Boolean onlyOneCheckConnection, DbConnectionOptions userOptions, DbConnectionInternal& connection)
at Microsoft.Data.ProviderBase.DbConnectionPool.TryGetConnection(DbConnection owningObject, TaskCompletionSource`1 retry, DbConnectionOptions userOptions, DbConnectionInternal& connection)
at Microsoft.Data.ProviderBase.DbConnectionFactory.TryGetConnection(DbConnection owningConnection, TaskCompletionSource`1 retry, DbConnectionOptions userOptions, DbConnectionInternal oldConnection, DbConnectionInternal& connection)
at Microsoft.Data.ProviderBase.DbConnectionInternal.TryOpenConnectionInternal(DbConnection outerConnection, DbConnectionFactory connectionFactory, TaskCompletionSource`1 retry, DbConnectionOptions userOptions)
at Microsoft.Data.ProviderBase.DbConnectionClosed.TryOpenConnection(DbConnection outerConnection, DbConnectionFactory connectionFactory, TaskCompletionSource`1 retry, DbConnectionOptions userOptions)
at Microsoft.Data.SqlClient.SqlConnection.TryOpen(TaskCompletionSource`1 retry)
at Microsoft.Data.SqlClient.SqlConnection.Open()
at Microsoft.EntityFrameworkCore.Storage.RelationalConnection.OpenDbConnection(Boolean errorsExpected)
at Microsoft.EntityFrameworkCore.Storage.RelationalConnection.Open(Boolean errorsExpected)
at Microsoft.EntityFrameworkCore.Storage.RelationalCommand.ExecuteReader(RelationalCommandParameterObject parameterObject)
at Microsoft.EntityFrameworkCore.Query.Internal.QueryingEnumerable`1.Enumerator.InitializeReader(DbContext _, Boolean result)
at Microsoft.EntityFrameworkCore.SqlServer.Storage.Internal.SqlServerExecutionStrategy.Execute[TState,TResult](TState state, Func`3 operation, Func`3 verifySucceeded)
at Microsoft.EntityFrameworkCore.Query.Internal.QueryingEnumerable`1.Enumerator.MoveNext()
at System.Collections.Generic.List`1..ctor(IEnumerable`1 collection)
at System.Linq.Enumerable.ToList[TSource](IEnumerable`1 source)
at uploadProj2.Controllers.Numbers.GetNumberFromServer() in C:\Users\yaakov\source\repos\uploadProj2\uploadProj2\Controllers\Numbers.cs:line 24
at Microsoft.Extensions.Internal.ObjectMethodExecutor.Execute(Object target, Object[] parameters)
at Microsoft.AspNetCore.Mvc.Infrastructure.ActionMethodExecutor.SyncActionResultExecutor.Execute(IActionResultTypeMapper mapper, ObjectMethodExecutor executor, Object controller, Object[] arguments)
at Microsoft.AspNetCore.Mvc.Infrastructure.ControllerActionInvoker.InvokeActionMethodAsync()
at Microsoft.AspNetCore.Mvc.Infrastructure.ControllerActionInvoker.Next(State& next, Scope& scope, Object& state, Boolean& isCompleted)
at Microsoft.AspNetCore.Mvc.Infrastructure.ControllerActionInvoker.InvokeNextActionFilterAsync()
This exception was originally thrown at this call stack:
[External Code]
uploadProj2.Controllers.Numbers.GetNumberFromServer() in Numbers.cs
[External Code]
@dovid צודק.
הנה הקוד. סתם קונטרולר לשם הבדיקה
[Route("api/[controller]")]
[ApiController]
public class Numbers : ControllerBase
{
private readonly Context context;
public Numbers(Context context)
{
this.context = context;
}
[HttpGet]
[Route("GetNumberFromServer")]
public IActionResult GetNumberFromServer()
{
List<int> ln = context.Numbers.Select(x => x.Number).ToList();
return Ok(ln[0]);
}
}
מנסה ליצור חיבור ל-DB באמצעות ספריית Context של EF.
נתחיל מהסוף הנה השגיאה (זמן ריצה)
database "Numbers" requested by the login. The login failed.
Login failed for user 'LAPTOP-QLS0D39V\yaakov'.'
יש לי DB שיצרתי ב-MSSMS בשם UploadProject.
בתוכו יש טבלה בשם Numbers שמכילה שדה אחד בשם number מסוג int. (יש כעת 2 רשומות אקראיות).
ה-Context נראה כך:
public class Context: DbContext
{
public Context(DbContextOptions<Context> options) : base(options)
{
}
public virtual DbSet<MyNumberEO> Numbers { get; set; }
protected override void OnModelCreating(ModelBuilder modelBuilder)
{
modelBuilder.Entity<MyNumberEO>().HasKey(n => n.Number);
}
}
כאשר MyNumberEO נראה כך
[Table("Numbers")]
public class MyNumberEO
{
public int Number { get; set; }
}
ConnectionStrings נראית כך
{
"ConnectionStrings": {
"UploadProject": "Data Source=(localdb)\\ProjectsV13;Initial Catalog=Numbers;Integrated Security=True;Connect Timeout=30;Encrypt=False;TrustServerCertificate=False;ApplicationIntent=ReadWrite;MultiSubnetFailover=False"
},
למעשה יש לי עוד פרוייקט עם אותו ConnectionString למעט כמובן השם וה-Initial Catalog וזה עובד לי טוב.
קובץ ה-startup.cs נראה כך:
public class Startup
{
public Startup(IConfiguration configuration)
{
Configuration = configuration;
}
public IConfiguration Configuration { get; }
// This method gets called by the runtime. Use this method to add services to the container.
public void ConfigureServices(IServiceCollection services)
{
string ConnectionString = Configuration.GetConnectionString("UploadProject");
services.AddDbContext<Context>(options => options.UseSqlServer(ConnectionString));
services.AddControllers();
}
// This method gets called by the runtime. Use this method to configure the HTTP request pipeline.
public void Configure(IApplicationBuilder app, IWebHostEnvironment env)
{
if (env.IsDevelopment())
{
app.UseDeveloperExceptionPage();
}
app.UseHttpsRedirection();
app.UseRouting();
app.UseAuthorization();
app.UseEndpoints(endpoints =>
{
endpoints.MapControllers();
});
}
}
שורה תחתונה יש את השגיאה שבראש ההודעה.
יש רעיון למישהו?
אגב למיטב הבנתי פרד"ס לא מתחייבים על כלום, בטח לא על עבודה במוסד ושאר הזיות (במחילה). כל מה שהם תורמים זה שאם הגעת דרכם, כביכול עברת את הבידוק, ואתה יכול תיאורטית בעתיד להתקבל אי שם לתעשיה בטחונית. יש הרבה בוטקאמפים שמבטיחים עבודה וגם מקיימים (אומנם הם לא עושים זאת בחינם כידוע, אבל לאדם בלי נתוני פתיחה של תואר זה יכול להיות נהדר).
@dovid
רק לחדד שהחלק הקריטי אותו יש להעביר לרמת קובץ ה-CSS, הוא ה-background-color. כך:
.aUser {
background-color: #FCA311;
}
.aUser:hover {
background-color: rgb(127, 13, 234);
}
ואגב בעקבות שרשור זה נודע לי
שאי אפשר לממש hover ב-inline style.
סביבת אנגולר:
html
<div style="background-color: #FCA311;
width:max-content;
transition: background-color ;
transition-duration: 1s;
cursor: pointer;"
class="aUser">
<i class="pi pi-user-plus"></i>
<p >הוסף</p>
</div>
css:
.aUser:hover {
background-color: rgb(127, 13, 234);
}
ה-transition לא פועל. יש למישהו השערה מדוע?
נ.ב. למנהלי המערכת בערכת עיצוב החדשה של האתר כשקטע מוגדר כקוד הוא לא מיושר משמאל לימין.
מתקשה לממש את -Promise. ממה שהבנתי Promise מקבל בקונסטרקטור 2 פרמטרים: resolve מופעל במקרה של הצלחה, reject במקרה של כישלון.
כעת הנה הקוד שכתבתי בסביבת אנגולר:
אני מנסה ליצור Promise שעד 10 שניות תוחזר שגיאה ומ-10 ומעלה זו תהיה הצלחה.
errorMessege: string = "Promise error !";
myPromise = new Promise((resolve, reject) => {
// Perform some async operation
setTimeout(() => {
const data = this.errorMessege;
reject(data);
}, 0);
setTimeout(() => {
const data = this.successMessege;
resolve(data);
}, 10000);
});
consumePromise() {
this.myPromise.then((data) => {
console.log(data);
}).catch((error) => {
console.error(error);
});
}
זה הכפתור שמנסה לצרוך את Promise
<button (click)=consumePromise()>consume</button>
מה שקורה בפועל זה:
א. מיד שאני טוען את הדף מופיע לי שגיאה של ה-Promise בקונסול
ב. לא משנה מתי אני לוחץ על הכפתור תמיד הוא יתן שגיאה.
אשמח להסבר, תודה רבה.