Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

How To Start a Saturn Project #349

Open
scorelocity opened this issue Aug 4, 2022 · 27 comments
Open

How To Start a Saturn Project #349

scorelocity opened this issue Aug 4, 2022 · 27 comments

Comments

@scorelocity
Copy link

Followed instructions on How To Start page exactly and when I run:

dotnet fake build -t run

I get the following error:

Could not execute because the specified command or file was not found.

Am I missing a global install of Fake or is something wrong with the local tools install, or something else?

Originally posted by @scorelocity in #348

@ghost
Copy link

ghost commented Aug 5, 2022

Are you able to run this?

dotnet --list-sdks

@scorelocity
Copy link
Author

Yes:

6.0.301 [/usr/share/dotnet/sdk]

@scorelocity
Copy link
Author

Seems that Fake is not being installed. It appears that fake-cli was removed from dotnet-tools.json in the Saturn template in this commit:

SaturnFramework/Saturn.Template@9e46b28

and therefore not being installed as part of

dotnet tool restore

Does it need to be installed some other way?

@ghost
Copy link

ghost commented Aug 5, 2022

I think it does not need to be installed. Previously it was used to facilitate the building of the project.

I thought that it would be possible to run this template by:

# after installing the template and instantiating a sample project
# ...
dotnet run --project ./src/SaturnSample/

But it's throwing a bunch of errors.

@ghost
Copy link

ghost commented Aug 5, 2022

Hum, those errors are related to the BooksViews, BooksRepository and BooksController. My guess is that after the upgrade that removed Fake (probably due to .NET incompatibilities), the feature of creating View/Repository/Controller automatically through the CLI started creating outdated files which does not compile.

❯ dotnet run --project ./src/SaturnSample/
    ~/SaturnSample/src/SaturnSample/Books/BooksViews.fs(4,14): error FS0039: The namespace 'GiraffeViewEngine' is not defined. [~/SaturnSample/src/SaturnSample/SaturnSample.fsproj]
    ~/SaturnSample/src/SaturnSample/Books/BooksViews.fs(10,7): error FS0039: The value or constructor 'div' is not defined. Maybe you want one of the following:   dict   Edit [~/SaturnSample/src/SaturnSample/SaturnSample.fsproj]
    ~/SaturnSample/src/SaturnSample/Books/BooksViews.fs(40,18): error FS0039: The value or constructor 'section' is not defined. Maybe you want one of the following:   Action [~/SaturnSample/src/SaturnSample/SaturnSample.fsproj]
    ~/SaturnSample/src/SaturnSample/Books/BooksViews.fs(45,7): error FS0039: The value or constructor 'div' is not defined. Maybe you want one of the following:   dict   Edit [~/SaturnSample/src/SaturnSample/SaturnSample.fsproj]
    ~/SaturnSample/src/SaturnSample/Books/BooksViews.fs(57,18): error FS0039: The value or constructor 'section' is not defined. Maybe you want one of the following:   Action [~/SaturnSample/src/SaturnSample/SaturnSample.fsproj]
    ~/SaturnSample/src/SaturnSample/Books/BooksViews.fs(61,7): error FS0039: The value or constructor 'div' is not defined. Maybe you want one of the following:   dict   Edit [~/SaturnSample/src/SaturnSample/SaturnSample.fsproj]
    ~/SaturnSample/src/SaturnSample/Books/BooksViews.fs(67,7): error FS0039: The value or constructor 'div' is not defined. Maybe you want one of the following:   dict   Edit [~/SaturnSample/src/SaturnSample/SaturnSample.fsproj]
    ~/SaturnSample/src/SaturnSample/Books/BooksViews.fs(81,7): error FS0039: The value or constructor 'div' is not defined. Maybe you want one of the following:   dict   Edit [~/SaturnSample/src/SaturnSample/SaturnSample.fsproj]
    ~/SaturnSample/src/SaturnSample/Books/BooksViews.fs(91,7): error FS0039: The value or constructor 'div' is not defined. Maybe you want one of the following:   dict   Edit [~/SaturnSample/src/SaturnSample/SaturnSample.fsproj]
    ~/SaturnSample/src/SaturnSample/Books/BooksViews.fs(102,18): error FS0039: The value or constructor 'section' is not defined. Maybe you want one of the following:   Action [~/SaturnSample/src/SaturnSample/SaturnSample.fsproj]
    ~/SaturnSample/src/SaturnSample/Books/BooksRepository.fs(6,27): error FS0039: The namespace 'ContextInsensitive' is not defined. [~/SaturnSample/src/SaturnSample/SaturnSample.fsproj]
    ~/SaturnSample/src/SaturnSample/Books/BooksController.fs(4,27): error FS0039: The namespace 'ContextInsensitive' is not defined. [~/SaturnSample/src/SaturnSample/SaturnSample.fsproj]

The build failed. Fix the build errors and run again.

@scorelocity
Copy link
Author

Yes, I'm getting the same errors when using dotnet run.

@ghost
Copy link

ghost commented Aug 5, 2022

@scorelocity try doing this:

  1. Update the BooksView.fs file. Switch open Giraffe.GiraffeViewEngine for open Giraffe.ViewEngine.
  2. Update the Books.Repository.fs. Delete the open FSharp.Control.Tasks.ContextInsensitive.
  3. Update the Books.Controller.fs. Delete the open FSharp.Control.Tasks.ContextInsensitive.

After those changes, try the dotnet run again.

@scorelocity
Copy link
Author

Yes, that seemed to work. Since this workaround didn't match any docs or README, I wonder if this should be an issue in the Saturn.Template project (I opened it here because I did not know what the problem was). It's also not clear if Saturn is intentionally moving away from Fake.

Anyways, @vgajo , thank you for your help.

@ghost
Copy link

ghost commented Aug 5, 2022

I created a PR to fix the template in Saturn.Cli repository, so we don't need to manually delete and switch some instructions.

We need to work later in the docs.

Please keep this issue open, while we don't have a PR to fix it (you can create it if you want).

@64J0
Copy link
Contributor

64J0 commented Aug 12, 2022

I created this PR ^ to update the how-to-start guide. You can find more details reading its description.

@precisemath
Copy link
Contributor

I created this PR: #364 as a part of this discussion. It changes GiraffeViewEngine to Giraffe.ViewEngine.

@mrakgr
Copy link

mrakgr commented Feb 7, 2023

I am having issues opening the template project as well. I got it to run, but am wondering why Ionide can't open the project to give me type inference. Right now I am trying to open it in Visual Studio, and I see that it is complaining that Saturn_sample.fsproj is not there. I am looking in the directory and see that it is named Saturn-sample.fsproj.

@mrakgr
Copy link

mrakgr commented Feb 7, 2023

I've edited the solution file by hand to fix this. I wonder if there is a way to delete and regenerate the solution automatically?

@mrakgr
Copy link

mrakgr commented Feb 7, 2023

The main page loads, but going to: http://localhost:8085/books

Gives the following error:

SQLite Error 1: 'no such table: Books'.
Saturn-sample
at Books.Controller.indexAction@10.MoveNext() in E:\Webdev\Fable\Saturn-sample\src\Saturn-sample\Books\BooksController.fs:line 17 at Giraffe.Core.chooseHttpFunc@122.Invoke(Unit unitVar) at Ply.TplPrimitives.ContinuationStateMachine`1.System-Runtime-CompilerServices-IAsyncStateMachine-MoveNext() at Giraffe.Core.continuation@1-5(HttpContext ctx, FSharpList`1 tail, FSharpOption`1 _arg1) at Giraffe.Core.chooseHttpFunc@122.Invoke(Unit unitVar) at Ply.TplPrimitives.ContinuationStateMachine`1.System-Runtime-CompilerServices-IAsyncStateMachine-MoveNext() at Giraffe.Core.chooseHttpFunc@122.Invoke(Unit unitVar) at Ply.TplPrimitives.ContinuationStateMachine`1.System-Runtime-CompilerServices-IAsyncStateMachine-MoveNext() at Saturn.Controller.controllerWithErrorHandler@356-2.Invoke(Unit unitVar) at Ply.TplPrimitives.tryWith[u](FSharpFunc`2 continuation, FSharpFunc`2 catch) --- End of stack trace from previous location --- at Saturn.Controller.controllerWithErrorHandler@355-4.Invoke(Exception _arg2) at Ply.TplPrimitives.tryWith[u](FSharpFunc`2 continuation, FSharpFunc`2 catch) at Ply.TplPrimitives.ContinuationStateMachine`1.System-Runtime-CompilerServices-IAsyncStateMachine-MoveNext() at Giraffe.Core.chooseHttpFunc@122.Invoke(Unit unitVar) at Ply.TplPrimitives.ContinuationStateMachine`1.System-Runtime-CompilerServices-IAsyncStateMachine-MoveNext() at Giraffe.Core.chooseHttpFunc@122.Invoke(Unit unitVar) at Ply.TplPrimitives.ContinuationStateMachine`1.System-Runtime-CompilerServices-IAsyncStateMachine-MoveNext() at Giraffe.SubRouting.routeWithPartialPath@24.Invoke(Unit unitVar) at Ply.TplPrimitives.ContinuationStateMachine`1.System-Runtime-CompilerServices-IAsyncStateMachine-MoveNext() at Giraffe.Core.chooseHttpFunc@122.Invoke(Unit unitVar) at Ply.TplPrimitives.ContinuationStateMachine`1.System-Runtime-CompilerServices-IAsyncStateMachine-MoveNext() at Giraffe.Core.continuation@1-5(HttpContext ctx, FSharpList`1 tail, FSharpOption`1 _arg1) at Giraffe.Core.chooseHttpFunc@122.Invoke(Unit unitVar) at Ply.TplPrimitives.ContinuationStateMachine`1.System-Runtime-CompilerServices-IAsyncStateMachine-MoveNext() at Saturn.PipelineHelpers.continuation@1-4(FSharpFunc`2 nxt, HttpContext ctx, Unit _arg1) at Saturn.PipelineHelpers.fetchSession@195.Invoke(Unit unitVar) at Ply.TplPrimitives.ContinuationStateMachine`1.System-Runtime-CompilerServices-IAsyncStateMachine-MoveNext() at Giraffe.Core.chooseHttpFunc@122.Invoke(Unit unitVar) at Ply.TplPrimitives.ContinuationStateMachine`1.System-Runtime-CompilerServices-IAsyncStateMachine-MoveNext() at Giraffe.SubRouting.routeWithPartialPath@24.Invoke(Unit unitVar) at Ply.TplPrimitives.ContinuationStateMachine`1.System-Runtime-CompilerServices-IAsyncStateMachine-MoveNext() at Giraffe.Core.chooseHttpFunc@122.Invoke(Unit unitVar) at Ply.TplPrimitives.ContinuationStateMachine`1.System-Runtime-CompilerServices-IAsyncStateMachine-MoveNext() at Giraffe.Middleware.Invoke@31.Invoke(Unit unitVar) at Ply.TplPrimitives.ContinuationStateMachine`1.System-Runtime-CompilerServices-IAsyncStateMachine-MoveNext() at Microsoft.AspNetCore.Session.SessionMiddleware.Invoke(HttpContext context) at Microsoft.AspNetCore.Session.SessionMiddleware.Invoke(HttpContext context) at Microsoft.AspNetCore.ResponseCompression.ResponseCompressionMiddleware.InvokeCore(HttpContext context) at Giraffe.Middleware.Invoke@64-5.Invoke(Unit unitVar) at Ply.TplPrimitives.tryWith[u](FSharpFunc`2 continuation, FSharpFunc`2 catch)

I am not familiar with databases so I have no idea what to do here.

@64J0
Copy link
Contributor

64J0 commented Feb 7, 2023

@mrakgr What command did you use to create the project locally?

@mrakgr
Copy link

mrakgr commented Feb 7, 2023

I followed the stuff in here: https://saturnframework.org/tutorials/how-to-start.html

But dotnet fake build -t run doesn't work for me so I am running it with dotnet run --project ./src/Saturn-sample/.

@64J0
Copy link
Contributor

64J0 commented Feb 7, 2023

Got it, I think the instructions there are a bit wrong. Maybe those instructions work well:

I'm going to test it in my local environment soon.

@mrakgr
Copy link

mrakgr commented Feb 7, 2023

Do I need to install anything special for SQLite perhaps?

@64J0
Copy link
Contributor

64J0 commented Feb 7, 2023

What is the output of the dotnet saturn migration?

@mrakgr
Copy link

mrakgr commented Feb 7, 2023

PS E:\Webdev\Fable\Saturn-sample> dotnet saturn migration

PS E:\Webdev\Fable\Saturn-sample> 

Nothing as far I can see. I forgot whether something has happened the first time around? I'll try a fresh template.

@mrakgr
Copy link

mrakgr commented Feb 7, 2023

I tried it, and the output of the migration is the same as above.

@mrakgr
Copy link

mrakgr commented Feb 7, 2023

Btw, dotnet new saturn -lang F# should be dotnet new Saturn -lang F#.

@64J0
Copy link
Contributor

64J0 commented Feb 7, 2023

Hum, weird, it was supposed to create the database with this command. There is something wrong with it then. This CLI command is related to this project AFAIK: https://github.com/SaturnFramework/Saturn.Cli.

@mrakgr
Copy link

mrakgr commented Feb 7, 2023

Wait, I get it.

PS E:\Webdev\Fable\SaturnSample> dotnet saturn migration
-------------------------------------------------------------------------------
Migrating from 0: Empty Schema to 202302071317: CreateBooks (Create Books)
-------------------------------------------------------------------------------

-------------------------------------------------------------------------------
202302071317: CreateBooks (Create Books) migrating
-------------------------------------------------------------------------------

CREATE TABLE Books(
      id TEXT NOT NULL,
      title TEXT NOT NULL,
      author TEXT NOT NULL
    )

-------------------------------------------------------------------------------
Done
-------------------------------------------------------------------------------


PS E:\Webdev\Fable\SaturnSample> 

I didn't think this would be a problem, but it seems the directory needs to be exactly SaturnSample. I skipped that step and had issues with the solution file previously, and now it seems the database. Sorry about this. Still, I wonder why the database migration needs to have a hardcoded directory like this?

@64J0
Copy link
Contributor

64J0 commented Feb 7, 2023

It's pretty weird, for sure. And it's also curious that it does not throw any error when you run the command outside the expected directory.

@mrakgr
Copy link

mrakgr commented Feb 7, 2023

[<EntryPoint>]
let main argv =
    let assembly = Assembly.GetExecutingAssembly()
    use db = new SqliteConnection "DataSource=src/Saturn-sample/database.sqlite"

I figured out how to make the database migration work on the project inside the Saturn-sample directory. I changed the use db = new SqliteConnection "DataSource=src/Saturn_sample/database.sqlite" to what you see above and the migration worked. I had to do similar kinds of fixes in the .sln file previously.

I review, though I apologized for failing to follow the instructions exactly, it is clearly that the template is broken. Maybe it is converting the - to _ for some reason.

@rusanov-vladimir
Copy link
Contributor

I believe you were hitting this bug. And there is a PR attempting to fix the template.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

No branches or pull requests

5 participants