Giter VIP home page Giter VIP logo

genie.jl's Introduction

Genie Logo

Genie.jl

🧞 The highly productive Julia web framework

Docs current status Website Tests Genie Downloads Tweet

Built with ❀︎ by contributors


Screenshot

Julia data dashboard powered by Genie. App gallery

Genie.jl is the backbone of the Genie Framework, which provides a streamlined and efficient workflow for developing modern web applications. It builds on Julia's strengths (high-level, high-performance, dynamic, JIT compiled), exposing a rich API and a powerful toolset for productive web development.

Genie Framework is composed of four main components:

  • Genie.jl: the server backend, providing features for routing, templating, authentication, and much more.
  • Stipple.jl: a package for building reactive UIs with a simple and powerful low-code API in pure Julia.
  • Genie Builder: a VSCode plugin for building UIs visually in a drag-and-drop editor.
  • SearchLight.jl: a complete ORM solution, enabling easy database integration without writing SQL queries.

To learn more about Genie, visit the documentation, and the app gallery.

If you need help with anything, you can find us on Discord.



Features of Genie.jl

πŸ› Genie Router: Genie has a really powerful πŸ’ͺ Router. Matching web requests to functions, extracting and setting up the request's variables and the execution environment, and invoking the response methods. Features include:

  • Static, Dynamic, Named routing
  • Routing parameters
  • Linking routes
  • Route management (Listing, Deleting, Modifying) support
  • Routing methods (GET, POST, PUT, PATCH, DELETE, OPTIONS)
  • and more ...
# Genie Hello World!
# As simple as Hello
using Genie
route("/hello") do
    "Welcome to Genie!"
end

# Powerful high-performance HTML view templates
using Genie.Renderer.Html
route("/html") do
    h1("Welcome to Genie!") |> html
end

# JSON rendering built in
using Genie.Renderer.Json
route("/json") do
    (:greeting => "Welcome to Genie!") |> json
end

# Start the app!
up(8888)

πŸ”Œ WebSocket: Genie provides a powerful workflow for client-server communication over websockets

julia> using Genie, Genie.Router

julia> channel("/foo/bar") do
         # process request
       end
[WS] /foo/bar => #1 | :foo_bar

πŸ“ƒ Templating: Built-in templates support for HTML, JSON, Markdown, JavaScript views.

πŸ” Authentication: Easy to add database backed authentication for restricted area of a website.

julia> using Pkg

julia> Pkg.add("GenieAuthentication") # adding authentication plugin

julia> using GenieAuthentication

julia> GenieAuthentication.install(@__DIR__)

⏰ Tasks: Tasks allow you to perform various operations and hook them with crons jobs for automation

module S3DBTask
# ... hidden code

  """
  Downloads S3 files to local disk.
  Populate the database from CSV file
  """
  function runtask()
    mktempdir() do directory
      @info "Path of directory" directory
      # download record file
      download(RECORD_URL)

      # unzip file
      unzip(directory)

      # dump to database
      dbdump(directory)
    end
  end

# ... more hidden code
end
$ bin/runtask S3DBTask

πŸ“¦ Plugin Ecosystem: Explore plugins built by the community such as GenieAuthentication, GenieAutoreload, GenieAuthorisation, and more

πŸ—ƒοΈ ORM Support: Explore SearchLight a complete ORM solution for Genie, supporting Postgres, MySQL, SQLite and other adapters

function search(user_names, regions, startdate, enddate)
# ... hidden code

  where_filters = SQLWhereEntity[
      SQLWhereExpression("lower(user_name) IN ( $(repeat("?,", length(user_names))[1:end-1] ) )", user_names),
      SQLWhereExpression("date >= ? AND date <= ?", startdate, enddate)
  ]

  SearchLight.find(UserRecord, where_filters, order=["record.date"])

# ... more hidden code
end
  • Database Migrations
module CreateTableRecord

import SearchLight.Migrations: create_table, column, primary_key, add_index, drop_table

function up()
  create_table(:record) do
    [
      primary_key()
      column(:user_uuid, :string, limit = 100)
      column(:user_name, :string, limit = 100)
      column(:status, :integer, limit = 4)
      column(:region, :string, limit = 20)
      column(:date_of_birth, :string, limit = 100)
    ]
  end

  add_index(:record, :user_uuid)
  add_index(:record, :user_name)
  add_index(:record, :region)
  add_index(:record, :date_of_birth)
end

function down()
  drop_table(:record)
end

end
  • Model Validations

πŸ“ More Genie features like:

  • Files Uploads
route("/", method = POST) do
  if infilespayload(:yourfile)
    write(filespayload(:yourfile))

    stat(filename(filespayload(:yourfile)))
  else
    "No file uploaded"
  end
end
  • Logging | Caching | Cookies and Sessions | Docker, Heroku, JuliaHub, etc Integrations | Genie Deploy
  • To explore more features check Genie Documentation πŸƒβ€β™‚οΈπŸƒβ€β™€οΈ

Contributing

Please contribute using GitHub Flow. Create a branch, add commits, and open a pull request.

Please read CONTRIBUTING for details on our CODE OF CONDUCT, and the process for submitting pull requests to us.

Special Credits

  • The awesome Genie logo was designed by Alvaro Casanova

  • Hoppscoth for readme structure template

  • Genie uses a multitude of packages that have been kindly contributed by the Julia community

License

This project is licensed under the MIT License - see the LICENSE file for details.

⭐ If you enjoy this project please consider starring the 🧞 Genie.jl GitHub repo. It will help us fund our open source projects.

genie.jl's People

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

genie.jl's Issues

Error "404 Not Found" when starting existing web app

I can create a new web app and see it in the browser. But I cannot start an existing web app it seems.

The local web server is running according to Julia:

shell> cd Anders_cool_new_app
F:\Julia\Anders_cool_new_app

julia> using Genie

julia> Genie.AppServer.startup()
[ Info: Listening on: Sockets.InetAddr{Sockets.IPv4}(ip"127.0.0.1", 0x1f40)
[2018-09-13 12:35:12|info]: Web server running at 127.0.0.1:8000

But when I go to http://localhost:8000/ I get two errors:

  1. In the browser, I get error
    "404 Not Found
    Oh dear, no page here!
    Sorry, we can not find /"

  2. In Julia, I get the session error below:

julia> [ Info: Accept:  ?    0↑     0↓    0s 127.0.0.1:8000:8000 ?16
[ Info: Accept:  ?    0↑     0↓    0s 127.0.0.1:8000:8000 ?16
β”Œ Warning: throttling 127.0.0.1
β”” @ HTTP.Servers C:\Users\aalexandersson\.julia\packages\HTTP\nUK4f\src\Servers.jl:128
β”Œ Info: HTTP.Messages.Request:
β”‚ """
β”‚ GET / HTTP/1.1
β”‚ Host: localhost:8000
β”‚ Connection: keep-alive
β”‚ Cache-Control: max-age=0
β”‚ Upgrade-Insecure-Requests: 1
β”‚ User-Agent: Mozilla/5.0 (Windows NT 6.1; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/69.0.3497.92 Safari/537.36
β”‚ Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,image/apng,*/*;q=0.8
β”‚ Accept-Encoding: gzip, deflate, br
β”‚ Accept-Language: en-US,en;q=0.9
β”‚
β”” """
[ Info: Accept:  ?    0↑     0↓    0s 127.0.0.1:8000:8000 ?16
[2018-09-13 12:35:35|info]: Session error
[2018-09-13 12:35:35|info]: C:\Users\aalexandersson\.julia\packages\Genie\Qst2l\src\Sessions.jl:30
[2018-09-13 12:35:36|info]: Generating temporary session id
[2018-09-13 12:35:37|info]: [2018-09-13T12:35:37.418] -- :/ -- Done

I am using Windows 7.

ConnectionPools.jl

Another FYI: ConnectionPools.jl may or may not help too. Working example is in the README, as well as in test/runtests.jl.

Currently it supports only Redis, but I'd be happy to add support for ODBC/SqLite/Postgres if that would help jinnie.

Errors when trying to start Genie

I just installed Genie by

Pkg.clone("https://github.com/essenciary/Genie.jl")

When try start it, I get

julia> using Genie
ERROR: LoadError: LoadError: LoadError: LoadError: UndefVarError: config not defined
Stacktrace:
 [1] is_dev() at /home/user/.julia/Genie/src/configuration.jl:41
 [2] include_from_node1(::String) at ./loading.jl:576
 [3] eval(::Module, ::Any) at ./boot.jl:235
 [4] _require(::Symbol) at ./loading.jl:490
 [5] require(::Symbol) at ./loading.jl:405
 [6] include_from_node1(::String) at ./loading.jl:576
 [7] eval(::Module, ::Any) at ./boot.jl:235
 [8] _require(::Symbol) at ./loading.jl:490
 [9] require(::Symbol) at ./loading.jl:405
 [10] include_from_node1(::String) at ./loading.jl:576
 [11] include(::String) at ./sysimg.jl:14
 [12] include_from_node1(::String) at ./loading.jl:576
 [13] eval(::Module, ::Any) at ./boot.jl:235
 [14] _require(::Symbol) at ./loading.jl:490
 [15] require(::Symbol) at ./loading.jl:405
while loading /home/user/.julia/Genie/src/App.jl, in expression starting on line 8
while loading /home/user/.julia/Genie/src/Inflector.jl, in expression starting on line 6
while loading /home/user/.julia/Genie/src/file_templates.jl, in expression starting on line 6
while loading /home/user/.julia/Genie/src/Genie.jl, in expression starting on line 32

I am using

julia> versioninfo()
Julia Version 0.6.3-pre.0
Commit 93168a6 (2017-12-18 07:11 UTC)
Platform Info:
  OS: Linux (x86_64-linux-gnu)
  CPU: Intel(R) Core(TM) i7-4770HQ CPU @ 2.20GHz
  WORD_SIZE: 64
  BLAS: libopenblas (USE64BITINT DYNAMIC_ARCH NO_AFFINITY Haswell)
  LAPACK: libopenblas64_
  LIBM: libopenlibm
  LLVM: libLLVM-3.9.1 (ORCJIT, haswell)

LINQ support (FYI, at least..)

I just noticed: https://github.com/davidanthoff/LINQ.jl/tree/dev

And know of SearchLight ORM here.

I only think I know a bit at a high-level what LINQ is about - an ORM(?).

So there seems to be redundant effort here(?). [And SearchLight was already planned to have it's own package.] I've not looked into the status of LINQ.jl (or SearchLight), but I think it may be the way forward for those who do not want to write their own SQL (and I see here that PostgreSQL is no longer a dependency).

I would hate for there to be competing ORM solutions (or going to have to use two together or learn two..).

Switch to HTTP.Server

Hey @essenciary, really enjoyed your JuliaCon talk. Over the last little while, I've been working on overhauling some of the fundamental webstack packages, including HttpCommon, HttpParser, HttpServer, URIParser, and Requests.jl. I've consolidated the packages (for now) into a single HTTP.jl package that is meant to be a full replacement for the previous packages I mentioned. Functionality & APIs should be largely the same, so it shouldn't be too hard to switch over.

The long-term plan is to deprecate some of those webstack packages as they are not actively maintained.

I'll try to find some time to dig more into the Genie framework and maybe submit a PR or two to help switch over! Great stuff!

Genie config seems to overuse `eval`

Just browsing through the code, I can see a lot of use of eval, which mostly seems to be used for pulling in configuration from the application. This seems a little fishy to me - generally eval should only be used in specialized circumstances, for example if you really need to generate a bunch of function definitions like you're doing inside Flax. For other uses, consider a setter function, for example:

module Foo

_config = nothing

function foo_config(c)
    global _config = c
end

function use_config()
    @info "using global config" config=_config
end

end

Thence

julia> Foo.foo_config("blah")
"blah"

julia> Foo.use_config()
β”Œ Info: using config
β””   config = "blah"

Using eval for pulling in configuration seems problematic and unlikely to work with precompilation. Actually I'm surprised it works at all! I'm probably missing something about how Genie initializes itself.

Warning: Replacing docs for `Genie.REPL.secret_token :: Tuple{}` in module `Genie.REPL

can not enter interactive session
julia = Version 1.0.0
window 10

julia> Genie.REPL.new_app("your_cool_new_app") [2018-09-12 11:54:37|info]: Done! New app created at C:\Users\swen\desktop\julia\your_cool_new_app [2018-09-12 11:54:38|info]: Changing active directory to your_cool_new_app [2018-09-12 11:54:38|info]: Installing app dependencies Updating registry at C:\Users\swen.julia\registries\GeneralUpdating git-repohttps://github.com/JuliaRegistries/General.git`
[2018-09-12 11:54:44|info]: Starting your brand new Genie app - hang tight!

Starting Genie in >> DEV << mode

β”Œ Warning: Replacing docs for Genie.REPL.secret_token :: Tuple{} in module Genie.REPL
β”” @ Base.Docs docs\Docs.jl:223
[2018-09-12 11:54:46|info]: LoadError("C:\Users\swen\desktop\julia\your_cool_new_app\genie.jl", 39, Base.Meta.ParseError("invalid escape sequence"))`

CMS

Any plans for a CMS?

Or would it be possible to integrate with a html CMS myself?

Error when trying to run the server in PROD mode

Genie is now working fine in DEV mode with Julia 1.0. However, if I try to run it in production mode I receive an error. This is with the untouched default app.

$ GENIE_ENV=prod bin/server
 _____         _
|   __|___ ___|_|___
|  |  | -_|   | | -_|
|_____|___|_|_|_|___|


Starting Genie in >> PROD << mode

ERROR: LoadError: LoadError: MethodError: Cannot `convert` an object of type String to an object of type Symbol
Closest candidates are:
  convert(::Type{T}, ::T) where T at essentials.jl:154
  Symbol(::String) at boot.jl:425
  Symbol(::AbstractString) at strings/basic.jl:205
  ...
Stacktrace:
 [1] (::getfield(Genie.Configuration, Symbol("##Settings#1#2")))(::Int64, ::Int64, ::String, ::Bool, ::String, ::String, ::Dict{String,String}, ::Array{String,1}, ::Bool, ::Int64, ::String, ::String, ::String, ::String, ::Symbol, ::Int64, ::String, ::Bool, ::String, ::Symbol, ::Bool, ::Bool, ::Bool, ::String, ::Bool, ::Bool, ::Bool, ::Bool, ::String, ::Symbol, ::String, ::String, ::Array{Tuple{String,String},1}, ::Symbol, ::Symbol, ::Bool, ::Bool, ::Bool, ::Bool, ::Symbol, ::Type) at /Users/antonio/.julia/packages/Genie/JhkJX/src/Configuration.jl:197
 [2] (::getfield(Core, Symbol("#kw#Type")))(::NamedTuple{(:output_length, :suppress_output, :log_router, :log_formatted, :log_cache, :log_views, :log_level, :log_verbosity, :assets_path, :cache_duration, :session_auto_start),Tuple{Int64,Bool,Bool,Bool,Bool,Bool,String,Symbol,String,Int64,Bool}}, ::Type{Settings}) at ./none:0
 [3] top-level scope at none:0
 [4] include at ./boot.jl:317 [inlined]
 [5] include_relative(::Module, ::String) at ./loading.jl:1038
 [6] include at ./sysimg.jl:29 [inlined]
 [7] include at /Users/antonio/code/my_cool_app/src/App.jl:4 [inlined]
 [8] bootstrap() at /Users/antonio/code/my_cool_app/src/App.jl:15
 [9] load() at /Users/antonio/code/my_cool_app/src/App.jl:200
 [10] top-level scope at none:0
 [11] include at ./boot.jl:317 [inlined]
 [12] include_relative(::Module, ::String) at ./loading.jl:1038
 [13] include(::Module, ::String) at ./sysimg.jl:29
 [14] exec_options(::Base.JLOptions) at ./client.jl:229
 [15] _start() at ./client.jl:421
in expression starting at /Users/antonio/code/my_cool_app/config/env/prod.jl:3
in expression starting at /Users/antonio/code/my_cool_app/genie.jl:45

Server closes connection unexpectedly

For some reason, the "Hello World"-kinda example won't work for me:

using Genie
import Genie.Router: route

route("/") do
    "Hi there!"
end
Genie.AppServer.startup()

in juno will tell me the server is running on port 8000, but any browser I point at localhost:8000 will complain that the connection was unexpectedly closed.

Similarly when trying with netcat, the connection is closed after I sent GET / HTTP/1.1 rather than sending back the "Hi there!".

Using HTTP directly instead like

using HTTP
HTTP.listen() do http::HTTP.Request
    HTTP.Response("Hi there!")
end

creates the expected result.

POST data

'lo.

I'd be interested in adding support for POST data if you don't already have it covered.

I already have some code written for getting POST and file data from my CGI module (see https://github.com/Jaylle/CGI.jl/blob/master/CGI.jl#L365 for example) - so I'd most likely use/modify that.

As for the interface, is there any preference for how this should be accessible and how it should work internally? For example, I see that GET query params are currently passed automatically as a method argument, but I like the idea of the framework not having to parse the POST/file data until an attempt is made to access said data (just to avoid doing unnecessary work). This would require having a new method (e.g. Genie.input) or module (e.g. Input.post) return an object containing the POST and/or file data on-demand, unless you could suggest an alternative.

Let me know your thoughts.

Registering on MetaData

Hi @essenciary, I really enjoyed your JuliaCon talk and I am so excited to start writing Genie Apps!

Is there something that prevents this package from being registered on MetaData? The current docs indicate that Pkg.clone is the method for getting this package.

Integration with new Interact family?

One of the things which excite me most about Julia is solving the web two language problem. This won't go away completely until compilation to WASM is improved, but there are really meaningful steps in the new Interact work by @piever: https://discourse.julialang.org/t/ann-interactbase-a-redesign-of-interact-to-create-and-style-web-apps-in-julia/11471/2

Have you thought about integration with Genie? Doing both UI and backend in julia would be a real advantage over say Django for data scientist types and amateur webdevs.

Module distributed no found in current path

julia> using Genie
WARNING: requiring "Dates" in module "SearchLight" did not define a correspondin
g module.
ERROR: LoadError: LoadError: ArgumentError: Module Distributed not found in curr
ent path.
Run Pkg.add("Distributed") to install the Distributed package.
Stacktrace:
[1] _require(::Symbol) at .\loading.jl:435
[2] require(::Symbol) at .\loading.jl:405
[3] include_from_node1(::String) at .\loading.jl:576
[4] eval(::Module, ::Any) at .\boot.jl:235
[5] _require(::Symbol) at .\loading.jl:490
[6] require(::Symbol) at .\loading.jl:405
[7] include_from_node1(::String) at .\loading.jl:576
[8] eval(::Module, ::Any) at .\boot.jl:235
[9] _require(::Symbol) at .\loading.jl:490
[10] require(::Symbol) at .\loading.jl:405
while loading C:\Users\Administrator.julia\v0.6\SearchLight\src\SearchLight.jl,
in expression starting on line 20
while loading C:\Users\Administrator.julia\v0.6\Genie\src\Genie.jl, in expressi
on starting on line 13

===========
julia> Pkg.add("Distributed")
ERROR: unknown package Distributed
macro expansion at .\pkg\entry.jl:53 [inlined]
(::Base.Pkg.Entry.##1#3{String,Base.Pkg.Types.VersionSet})() at .\task.jl:335
Stacktrace:
[1] sync_end() at .\task.jl:287
[2] macro expansion at .\task.jl:303 [inlined]
[3] add(::String, ::Base.Pkg.Types.VersionSet) at .\pkg\entry.jl:51
[4] (::Base.Pkg.Dir.##4#7{Array{Any,1},Base.Pkg.Entry.#add,Tuple{String}})() at
.\pkg\dir.jl:36
[5] cd(::Base.Pkg.Dir.##4#7{Array{Any,1},Base.Pkg.Entry.#add,Tuple{String}}, ::
String) at .\file.jl:59
[6] #cd#1(::Array{Any,1}, ::Function, ::Function, ::String, ::Vararg{String,N}
where N) at .\pkg\dir.jl:36
[7] add(::String) at .\pkg\pkg.jl:117

No YAML package for Genie-0.7.0 with Julia-0.5.0

Hi, i tried to use Genie with Julia-0.5.0 on Windows8

Genie.jl-0.7.0>julia -L genie.jl --color=yes -q

Starting Genie in >> DEV << mode using 1 worker(s)

ERROR: LoadError: LoadError: LoadError: LoadError: ArgumentError: Module YAML no
t found in current path.
Run Pkg.add("YAML") to install the YAML package.

julia> Pkg.add("YAML")
ERROR: unknown package https://github.com/JuliaDB/DBI.jl required by Genie.jl-0.
7.0

Thanks in advance!

ErrorException in example application

Hi, was thinking about trying out this framework which seems super cool. However, when I try to get started using the instructions in the README file i end up with the following error when going to localhost:8000

2017-08-26T20:50:54.099 - critical: ErrorException("type String has no field data")


2017-08-26T20:50:54.607 - critical: 
Stacktrace:
 [1] encryption_sauce() at /Users/linuslagerhjelm/.julia/v0.6/Genie/src/Encryption.jl:41
 [2] encrypt at /Users/linuslagerhjelm/.julia/v0.6/Genie/src/Encryption.jl:17 [inlined]
 [3] |> at ./operators.jl:862 [inlined]
 [4] set! at /Users/linuslagerhjelm/.julia/v0.6/Genie/src/Cookies.jl:47 [inlined]
 [5] #start#1(::Dict{String,String}, ::Function, ::String, ::HttpCommon.Request, ::HttpCommon.Response) at /Users/linuslagerhjelm/.julia/v0.6/Genie/src/Sessions.jl:64
 [6] route_request(::HttpCommon.Request, ::HttpCommon.Response, ::IPv4) at /Users/linuslagerhjelm/.julia/v0.6/Genie/src/Router.jl:84
 [7] handle_request(::HttpCommon.Request, ::HttpCommon.Response, ::IPv4) at /Users/linuslagerhjelm/.julia/v0.6/Genie/src/AppServer.jl:122
 [8] (::AppServer.##1#9)(::HttpCommon.Request, ::HttpCommon.Response) at /Users/linuslagerhjelm/.julia/v0.6/Genie/src/AppServer.jl:25
 [9] (::HttpServer.#on_message_complete#14{HttpServer.Server,HttpServer.Client{TCPSocket},Bool})(::HttpCommon.Request) at /Users/linuslagerhjelm/.julia/v0.6/HttpServer/src/HttpServer.jl:427
 [10] on_message_complete(::Ptr{HttpParser.Parser}) at /Users/linuslagerhjelm/.julia/v0.6/HttpServer/src/RequestParser.jl:113
 [11] http_parser_execute(::HttpParser.Parser, ::HttpParser.ParserSettings, ::Array{UInt8,1}) at /Users/linuslagerhjelm/.julia/v0.6/HttpParser/src/HttpParser.jl:115
 [12] process_client(::HttpServer.Server, ::HttpServer.Client{TCPSocket}, ::Bool) at /Users/linuslagerhjelm/.julia/v0.6/HttpServer/src/HttpServer.jl:389
 [13] (::HttpServer.##7#8{HttpServer.Server,Bool})() at ./task.jl:335

And I can not see anything but the 500 - error page in the browser 😞

Error when running using Geni

Error when running "using Genie"

Julia 1.0 OSX

`julia> using Genie
[ Info: Precompiling Genie [f2e6c872-b7ec-5699-ac8c-130193b63b97]
ERROR: LoadError: LoadError: ArgumentError: Package Genie does not have YAML in its dependencies:

  • If you have Genie checked out for development and have
    added YAML as a dependency but haven't updated your primary
    environment's manifest file, try Pkg.resolve().
  • Otherwise you may need to report an issue with Genie
    Stacktrace:
    [1] require(::Module, ::Symbol) at ./loading.jl:830
    [2] include at ./boot.jl:317 [inlined]
    [3] include_relative(::Module, ::String) at ./loading.jl:1038
    [4] include at ./sysimg.jl:29 [inlined]
    [5] include(::String) at /Users/dell/.julia/packages/Genie/3qBuH/src/Genie.jl:4
    [6] top-level scope at none:0
    [7] include at ./boot.jl:317 [inlined]
    [8] include_relative(::Module, ::String) at ./loading.jl:1038
    [9] include(::Module, ::String) at ./sysimg.jl:29
    [10] top-level scope at none:2
    [11] eval at ./boot.jl:319 [inlined]
    [12] eval(::Expr) at ./client.jl:389
    [13] top-level scope at ./none:3
    in expression starting at /Users/dell/.julia/packages/Genie/3qBuH/src/Configuration.jl:6
    in expression starting at /Users/dell/.julia/packages/Genie/3qBuH/src/Genie.jl:8
    ERROR: Failed to precompile Genie [f2e6c872-b7ec-5699-ac8c-130193b63b97] to /Users/dell/.julia/compiled/v1.0/Genie/MKohm.ji.
    Stacktrace:
    [1] error(::String) at ./error.jl:33
    [2] macro expansion at ./logging.jl:313 [inlined]
    [3] compilecache(::Base.PkgId, ::String) at ./loading.jl:1184
    [4] macro expansion at ./logging.jl:311 [inlined]
    [5] _require(::Base.PkgId) at ./loading.jl:941
    [6] require(::Base.PkgId) at ./loading.jl:852
    [7] macro expansion at ./logging.jl:311 [inlined]
    [8] require(::Module, ::Symbol) at ./loading.jl:834`

Can't start Genie interactive mode

An installing of Genie was succeeded first time today.
But Genie console don't automatically start when I created new app.
If I run Genie server by myself (click .bat or , run bin/server) I get errors.

I'm using
Windows 10, Powershell
Julia v1.0
Genie (up to date)

julia> using Genie

julia> Genie.REPL.new_app( "my_genie" );
[2018-09-12 08:34:35|info]: Done! New app created at C:\users\wall-e\juliatest\my_genie

julia>
PS C:\users\wall-e\juliatest> cd my_genie
PS C:\users\wall-e\juliatest\my_genie> bin/server

C:\users\wall-e\juliatest\my_genie>C:\Users\Wall-E\AppData\Local\Julia-1.0.0\bin\julia -L ../genie.jl --color=yes --depwarn=no -q -- s
ERROR: could not open file C:\users\wall-e\juliatest\genie.jl
Stacktrace:
 [1] include at .\boot.jl:317 [inlined]
 [2] include_relative(::Module, ::String) at .\loading.jl:1038
 [3] include(::Module, ::String) at .\sysimg.jl:29
 [4] macro expansion at .\logging.jl:324 [inlined]
 [5] exec_options(::Base.JLOptions) at .\client.jl:219
 [6] _start() at .\client.jl:421

FYI - AccessControl.jl

Hi there,

Found this project by looking at the (few) stars of SecureSessions.jl.
Thought you might be interested in AccessControl.jl.

It is very much a work-in-progress, just thought I'd mention it, particularly if it overlaps with your project.
Feedback welcome, though I'm trying to keep it low-level at this stage to enable framework authors to wrap it with their preferred style.

Cheers,
Jock

Minimal working example?

I've been following this project for some time, and found I have some spare VMs to mess around on! Do you have a minimum working example available so I can check this package out?

I'm only lightly familiar with Flask, having built an app or two. So really, just something for Genie that defines a page, maybe a database export I can import...just something to get me started would be fantastic.

Readme enhancements

url: https://github.com/essenciary/Genie.jl

Location: Working with resources/Adding views/Rendering views
Missing: explain that the html! method comes from the Renderer class
Example: Add "using Genie.Renderer" at the top of the definition of the billgatesbooks function

Location: Generate the Controller
Missing: explain that the user should test the BooksController.billgatesbooks function in Julia to make sure it produces the expected text to avoid issues later
Example: genie> BooksController.billgatesbooks()

fix src/Genie.jl

This error occurred in Solus Linux, julia v0.6

julia> using Genie
ERROR: LoadError: could not open file /home/khkkoj/.julia/v0.6/Genie/src/configuration.jl
Stacktrace:
 [1] macro expansion at ./REPL.jl:97 [inlined]
 [2] (::Base.REPL.##1#2{Base.REPL.REPLBackend})() at ./event.jl:73
while loading /home/khkkoj/.julia/v0.6/Genie/src/Genie.jl, in expression starting on line 8

The problem was in src/Genie.jl

in line 8,

include(joinpath(Pkg.dir("Genie"), "src", "configuration.jl"))

configuration.jl should be changed to Configuation.jl since the file name in the src folder is the capitalized one...

I fixed this and it ran well!

Post request with payload: Example

Hi,

I very recently started working with Genie. Really excited to try it out!

I searched for an example in the docs to handle a post request with request payload and I couldn't find any. Could you please share an example on how to handle a post request and handle it in a controller?

Also how to start the app in production mode?

Thank you,
Abann

Hydration / dehydration?

Just a dumb question, but is this the same thing as serializing & deserializing? Because it seems like a poor name if so.

Authentication layer example

Hi,

I'd like to use OAuth 2.0-type authentication as part of an API. I can't seem to find an example of how to implement this using the existing auth layer. Is there an example, if not could I help write one?

Thanks! Great library by the way.

[RFI] License

Under which license is Genie.jl distributed ?

I haven't found any precise information for now.

Thanks
Oli

Nothing shows up after running server

Julia 1.0 OSX

`julia> HTTP.listen() do request::HTTP.Request
@show request
@show request.method
@show HTTP.header(request, "Content-Type")
@show HTTP.payload(request)
try
return HTTP.Response("Hello")
catch e
return HTTP.Response(404, "Error: $e")
end
end
[ Info: Listening on: Sockets.InetAddr{Sockets.IPv4}(ip"127.0.0.1", 0x1f91)

`

Building EzXML BUG V(1.1)

Building EzXML ────→ ~/.julia/packages/EzXML/DUxj7/deps/build.log
β”Œ Error: Error building EzXML:
β”‚ β”Œ Warning: platform_key() is deprecated, use platform_key_abi() from now on
β”‚ β”‚ caller = ip:0x0
β”‚ β”” @ Core :-1
β”‚ [ Info: Downloading https://github.com/bicycle1885/XML2Builder/releases/download/v1.0.1/XML2Builder.v2.9.7.x86_64-linux-gnu.tar.gz to /root/.julia/packages/EzXML/DUxj7/deps/usr/downloads/XML2Builder.v2.9.7.x86_64-linux-gnu.tar.gz...
β”‚ ERROR: LoadError: Could not download https://github.com/bicycle1885/XML2Builder/releases/download/v1.0.1/XML2Builder.v2.9.7.x86_64-linux-gnu.tar.gz to /root/.julia/packages/EzXML/DUxj7/deps/usr/downloads/XML2Builder.v2.9.7.x86_64-linux-gnu.tar.gz:
β”‚ ErrorException("")
β”‚ Stacktrace:
β”‚ [1] error(::String) at ./error.jl:33
β”‚ [2] macro expansion at ./logging.jl:313 [inlined]
β”‚ [3] #download#89(::Bool, ::Function, ::String, ::String) at /root/.julia/packages/BinaryProvider/cVlaj/src/PlatformEngines.jl:487
β”‚ [4] #download at ./none:0 [inlined]
β”‚ [5] #download_verify#90(::Bool, ::Bool, ::Bool, ::Function, ::String, ::String, ::String) at /root/.julia/packages/BinaryProvider/cVlaj/src/PlatformEngines.jl:567
β”‚ [6] #download_verify at ./none:0 [inlined]
β”‚ [7] #install#129(::Prefix, ::String, ::Bool, ::Bool, ::Bool, ::Function, ::String, ::String) at /root/.julia/packages/BinaryProvider/cVlaj/src/Prefix.jl:314
β”‚ [8] (::getfield(BinaryProvider, Symbol("#kw##install")))(::NamedTuple{(:prefix, :force, :verbose),Tuple{Prefix,Bool,Bool}}, ::typeof(install), ::String, ::String) at ./none:0
β”‚ [9] top-level scope at /root/.julia/packages/EzXML/DUxj7/deps/build.jl:36
β”‚ [10] include at ./boot.jl:317 [inlined]
β”‚ [11] include_relative(::Module, ::String) at ./loading.jl:1041
β”‚ [12] include(::Module, ::String) at ./sysimg.jl:29
β”‚ [13] include(::String) at ./client.jl:388
β”‚ [14] top-level scope at none:0
β”‚ in expression starting at /root/.julia/packages/EzXML/DUxj7/deps/build.jl:32
β”‚ [16:52:17]
β”‚ [16:52:17] curl: (35) Peer reports incompatible or unsupported protocol version.
β”” @ Pkg.Operations /buildworker/worker/package_linux64/build/usr/share/julia/stdlib/v1.0/Pkg/src/Operations.jl:1069
Building Gumbo ────→ ~/.julia/packages/Gumbo/G7Qbw/deps/build.log
β”Œ Error: Error building Gumbo:
β”‚ β”Œ Warning: platform_key() is deprecated, use platform_key_abi() from now on
β”‚ β”‚ caller = ip:0x0
β”‚ β”” @ Core :-1
β”‚ β”Œ Warning: Could not extract the platform key of https://github.com/JuliaWeb/GumboBuilder/releases/download/v0.1.0/Gumbo.x86_64-linux-gnu.tar.gz; continuing...
β”‚ β”” @ BinaryProvider ~/.julia/packages/BinaryProvider/cVlaj/src/Prefix.jl:185
β”‚ [ Info: Downloading https://github.com/JuliaWeb/GumboBuilder/releases/download/v0.1.0/Gumbo.x86_64-linux-gnu.tar.gz to /root/.julia/packages/Gumbo/G7Qbw/deps/usr/downloads/Gumbo.x86_64-linux-gnu.tar.gz...
β”‚ ERROR: LoadError: Could not download https://github.com/JuliaWeb/GumboBuilder/releases/download/v0.1.0/Gumbo.x86_64-linux-gnu.tar.gz to /root/.julia/packages/Gumbo/G7Qbw/deps/usr/downloads/Gumbo.x86_64-linux-gnu.tar.gz:
β”‚ ErrorException("")
β”‚ Stacktrace:
β”‚ [1] error(::String) at ./error.jl:33
β”‚ [2] macro expansion at ./logging.jl:313 [inlined]
β”‚ [3] #download#89(::Bool, ::Function, ::String, ::String) at /root/.julia/packages/BinaryProvider/cVlaj/src/PlatformEngines.jl:487
β”‚ [4] #download at ./none:0 [inlined]
β”‚ [5] #download_verify#90(::Bool, ::Bool, ::Bool, ::Function, ::String, ::String, ::String) at /root/.julia/packages/BinaryProvider/cVlaj/src/PlatformEngines.jl:567
β”‚ [6] #download_verify at ./none:0 [inlined]
β”‚ [7] #install#129(::Prefix, ::String, ::Bool, ::Bool, ::Bool, ::Function, ::String, ::String) at /root/.julia/packages/BinaryProvider/cVlaj/src/Prefix.jl:314
β”‚ [8] (::getfield(BinaryProvider, Symbol("#kw##install")))(::NamedTuple{(:prefix, :force, :verbose),Tuple{Prefix,Bool,Bool}}, ::typeof(install), ::String, ::String) at ./none:0
β”‚ [9] top-level scope at /root/.julia/packages/Gumbo/G7Qbw/deps/build.jl:27
β”‚ [10] include at ./boot.jl:317 [inlined]
β”‚ [11] include_relative(::Module, ::String) at ./loading.jl:1041
β”‚ [12] include(::Module, ::String) at ./sysimg.jl:29
β”‚ [13] include(::String) at ./client.jl:388
β”‚ [14] top-level scope at none:0
β”‚ in expression starting at /root/.julia/packages/Gumbo/G7Qbw/deps/build.jl:23
β”‚ [16:52:32]
β”‚ [16:52:32] curl: (35) Peer reports incompatible or unsupported protocol version.

using Genie

At some point, we should aim to be able to do the following:

julia> Pkg.clone("https://github.com/essenciary/Genie.jl.git")
julia> using Genie

Unless I'm confused, the shortest distance to be able to run Genie is:

julia> Pkg.clone("https://github.com/JuliaDB/PostgreSQL.jl.git")
julia> using PostgreSQL
julia> Pkg.clone("https://github.com/essenciary/Genie.jl.git")
julia> include(Pkg.dir("Genie","genie.jl"))

Also see #9

Updated signatures for route.jl

Hi,

We just pulled latest master branch and we see that the route definitions have changes (can't use a route(string,string...) route after recent commits. We compared the versions and those signatures have been removed. c0cd59b...f92789e

Looking for best way forward - is there another pattern that we should follow for route definitions? The example seem to still use the old definitions - https://github.com/essenciary/genie-todo-mvc/blob/master/config/routes.jl.

Thanks!

@dehann

DB Initialization Removed

e559572 Removed Genie.REPL.db_init() and is still referenced in documentation.

Best I can tell this function is still needed for initializing schema_migrations.
Alternatively a user could just run SearchLight.create_migrations_table(App.config.db_migrations_table_name) directly.

Precompile / sysimg / binary

@essenciary, have you tried (or know about) precompiling a Genie project into a single executable? Ideally for use in a desktop app, something like https://github.com/NHDaly/ApplicationBuilder.jl

Or, what about building a sysimg? I got my way through generating a sysimg but so far it hasnt produced any noticeable benefit -- the structure of the project seems to require a little more hoop jumping to ensure all deps are compiled AOT...

I'm loving the perf & boilerplate you established with Genie, but that initial wait time to compile each route as they are first-requested just kills the possibilities beyond traditional long-running deployments. Is there a flag I'm missing to precompile each Flax view/route?

I'm pretty confident the killer feature that'll open the floodgates of adoption, with Julia web servers in general, would be parity with golang's ability to spit out a self-contained binary. Any electron app beyond the scope of throwaway utilities ends up with non-trivial server & DB systems (ie https://github.com/Foundry376/Mailspring) that would benefit herein. Any thoughts/advice in this direction?

LoadError: LoadError: InitError: ArgumentError: Unknown time zone "America/Indianapolis" trying to run using Genie

I saw that this issue is closed but I am still getting the error
#48

I am on a corporate network I am not sure if that is why. Thank you!

ERROR: LoadError: LoadError: InitError: ArgumentError: Unknown time zone "America/Indianapolis"

Stacktrace:
[1] (::getfield(TimeZones, Symbol("##1#3")){String})() at %userprofile%.julia\packages\TimeZones\wytr8\src\TimeZones.jl:70
[2] get!(::getfield(TimeZones, Symbol("##1#3")){String}, ::Dict{AbstractString,Dates.TimeZone}, ::String) at .\dict.jl:453
[3] Type at %userprofile%.julia\packages\TimeZones\wytr8\src\TimeZones.jl:64 [inlined]
[4] localzone() at %userprofile%.julia\packages\TimeZones\wytr8\src\local.jl:146
[5] Type at %userprofile%.julia\packages\Memento\QMKyB\src\formatters.jl:35 [inlined]
[6] #config!#71(::String, ::Dict{AbstractString,Int64}, ::Bool, ::Bool, ::Bool, ::Bool, ::Function, ::Memento.Logger, ::String) at %userprofile%.julia\packages\Memento\QMKyB\src\config.jl:39
[7] #config!#69 at %userprofile%.julia\packages\Memento\QMKyB\src\config.jl:36 [inlined]
[8] config! at %userprofile%.julia\packages\Memento\QMKyB\src\config.jl:25 [inlined]
[9] init() at %userprofile%.julia\packages\Memento\QMKyB\src\Memento.jl:67
[10] _include_from_serialized(::String, ::Array{Any,1}) at .\loading.jl:627
[11] macro expansion at .\logging.jl:312 [inlined]
[12] _require_search_from_serialized(::Base.PkgId, ::String) at .\loading.jl:698
[13] _require(::Base.PkgId) at .\loading.jl:931
[14] require(::Base.PkgId) at .\loading.jl:852
[15] macro expansion at .\logging.jl:311 [inlined]
[16] require(::Module, ::Symbol) at .\loading.jl:834
[17] include at .\boot.jl:317 [inlined]
[18] include_relative(::Module, ::String) at .\loading.jl:1038
[19] include at .\sysimg.jl:29 [inlined]
[20] include(::String) at %userprofile%.julia\packages\Genie\VQydg\src\Genie.jl:4
[21] top-level scope at none:0
[22] include at .\boot.jl:317 [inlined]
[23] include_relative(::Module, ::String) at .\loading.jl:1038
[24] include(::Module, ::String) at .\sysimg.jl:29
[25] top-level scope at none:2
[26] eval at .\boot.jl:319 [inlined]
[27] eval(::Expr) at .\client.jl:389
[28] top-level scope at .\none:3
during initialization of module Memento
in expression starting at %userprofile%.julia\packages\Genie\VQydg\src\Loggers.jl:6
in expression starting at %userprofile%.julia\packages\Genie\VQydg\src\Genie.jl:24
ERROR: Failed to precompile Genie [c43c736e-a2d1-11e8-161f-af95117fbd1e] to %userprofile%.julia\compiled\v1.0\Genie\8eazC.ji.
Stacktrace:
[1] error(::String) at .\error.jl:33
[2] macro expansion at .\logging.jl:313 [inlined]
[3] compilecache(::Base.PkgId, ::String) at .\loading.jl:1184
[4] _require(::Base.PkgId) at .\logging.jl:311
[5] require(::Base.PkgId) at .\loading.jl:852
[6] macro expansion at .\logging.jl:311 [inlined]
[7] require(::Module, ::Symbol) at .\loading.jl:834

Warnings on 0.6.0

On Julia 0.6.0 i've got a lot of warnings when "using Genie":

WARNING: Array{T}(::Type{T}, m::Int) is deprecated, use Array{T}(m) instead.
Stacktrace:
 [1] depwarn(::String, ::Symbol) at ./deprecated.jl:70
 [2] Array(::Type{Any}, ::Int64) at ./deprecated.jl:57
 [3] @memoize(::Vararg{Any,N} where N) at /home/a.konovalov/.julia/v0.6/Memoize/src/Memoize.jl:32
 [4] include_from_node1(::String) at ./loading.jl:569
 [5] eval(::Module, ::Any) at ./boot.jl:235
 [6] _require(::Symbol) at ./loading.jl:483
 [7] require(::Symbol) at ./loading.jl:398
 [8] include_from_node1(::String) at ./loading.jl:569
 [9] eval(::Module, ::Any) at ./boot.jl:235
 [10] _require(::Symbol) at ./loading.jl:483
 [11] require(::Symbol) at ./loading.jl:398
 [12] eval(::Module, ::Any) at ./boot.jl:235
 [13] eval_user_input(::Any, ::Base.REPL.REPLBackend) at ./REPL.jl:66
 [14] macro expansion at ./REPL.jl:97 [inlined]
 [15] (::Base.REPL.##1#2{Base.REPL.REPLBackend})() at ./event.jl:73
while loading /home/a.konovalov/.julia/v0.6/Genie/src/Configuration.jl, in expression starting on line 106

WARNING: deprecated syntax "abstract GenieType" at /home/a.konovalov/.julia/v0.6/Genie/src/genie_types.jl:8.
Use "abstract type GenieType end" instead.

WARNING: deprecated syntax "typealias Controller GenieController" at /home/a.konovalov/.julia/v0.6/Genie/src/genie_types.jl:16.
Use "const Controller = GenieController" instead.

WARNING: deprecated syntax "typealias Channel GenieChannel" at /home/a.konovalov/.julia/v0.6/Genie/src/genie_types.jl:21.
Use "const Channel = GenieChannel" instead.

WARNING: deprecated syntax "typealias Route Tuple{Tuple{String,String,Union{String,Function}},Dict{Symbol,Dict{Any,Any}}}" at /home/a.konovalov/.julia/v0.6/Genie/src/Router.jl:28.
Use "const Route = Tuple{Tuple{String,String,Union{String,Function}},Dict{Symbol,Dict{Any,Any}}}" instead.

WARNING: deprecated syntax "typealias Channel Tuple{Tuple{String,Union{String,Function}},Dict{Symbol,Dict{Any,Any}}}" at /home/a.konovalov/.julia/v0.6/Genie/src/Router.jl:29.
Use "const Channel = Tuple{Tuple{String,Union{String,Function}},Dict{Symbol,Dict{Any,Any}}}" instead.

WARNING: deprecated syntax "typealias HttpPostData Dict{String,String}" at /home/a.konovalov/.julia/v0.6/Genie/src/Input.jl:19.
Use "const HttpPostData = Dict{String,String}" instead.

WARNING: deprecated syntax "typealias HttpFiles Dict{String,HttpFile}" at /home/a.konovalov/.julia/v0.6/Genie/src/Input.jl:20.
Use "const HttpFiles = Dict{String,HttpFile}" instead.

WARNING: deprecated syntax "typealias ClientId Int" at /home/a.konovalov/.julia/v0.6/Genie/src/Channels.jl:9.
Use "const ClientId = Int" instead.

WARNING: deprecated syntax "typealias ChannelId String" at /home/a.konovalov/.julia/v0.6/Genie/src/Channels.jl:10.
Use "const ChannelId = String" instead.

WARNING: deprecated syntax "typealias ChannelClient Dict{Symbol,Union{WebSockets.WebSocket,Vector{ChannelId}}}" at /home/a.konovalov/.julia/v0.6/Genie/src/Channels.jl:11.
Use "const ChannelClient = Dict{Symbol,Union{WebSockets.WebSocket,Vector{ChannelId}}}" instead.

WARNING: deprecated syntax "typealias ChannelClientsCollection Dict{ClientId,ChannelClient}" at /home/a.konovalov/.julia/v0.6/Genie/src/Channels.jl:12.
Use "const ChannelClientsCollection = Dict{ClientId,ChannelClient}" instead.

WARNING: deprecated syntax "typealias ChannelSubscriptionsCollection Dict{ChannelId,Vector{ClientId}}" at /home/a.konovalov/.julia/v0.6/Genie/src/Channels.jl:13.
Use "const ChannelSubscriptionsCollection = Dict{ChannelId,Vector{ClientId}}" instead.

WARNING: deprecated syntax "typealias MessagePayload Union{Void,Dict}" at /home/a.konovalov/.julia/v0.6/Genie/src/Channels.jl:14.
Use "const MessagePayload = Union{Void,Dict}" instead.

Are you plan to completely switch to 0.6.0 in a near future? I will be very appreciate if you start new "temporary" git branch for 0.6.0 containing Genie code with fixed/modern Julia syntax.
I'm totally newcomer to Julia, so i'm not sure that i can fix all of this warnings correctly myself :(

error using Genie julia (1.0.0)

when i type using Genie shows error here is error trace : -

WARNING: could not import Base.reload into Util
ERROR: LoadError: LoadError: MethodError: no method matching parse(::String)
Closest candidates are:
parse(::Type{LibGit2.GitCredential}, ::AbstractString) at /home/mksmmi/julia/usr/share/julia/stdlib/v1.0/LibGit2/src/gitcredential.jl:71
parse(::Type{LibGit2.GitCredentialHelper}, ::AbstractString) at /home/mksmmi/julia/usr/share/julia/stdlib/v1.0/LibGit2/src/gitcredential.jl:158
parse(::Type{Sockets.IPv4}, ::AbstractString) at /home/mksmmi/julia/usr/share/julia/stdlib/v1.0/Sockets/src/IPAddr.jl:166
...
Stacktrace:
[1] top-level scope at none:0
[2] include at ./boot.jl:317 [inlined]
[3] include_relative(::Module, ::String) at ./loading.jl:1038
[4] include at ./sysimg.jl:29 [inlined]
[5] include(::String) at /home/mksmmi/.julia/dev/Genie/src/Genie.jl:4
[6] top-level scope at none:0
[7] include at ./boot.jl:317 [inlined]
[8] include_relative(::Module, ::String) at ./loading.jl:1038
[9] include(::Module, ::String) at ./sysimg.jl:29
[10] top-level scope at none:2
[11] eval at ./boot.jl:319 [inlined]
[12] eval(::Expr) at ./client.jl:389
[13] top-level scope at ./none:3
in expression starting at /home/mksmmi/.julia/dev/Genie/src/Sessions.jl:16
in expression starting at /home/mksmmi/.julia/dev/Genie/src/Genie.jl:32
ERROR: Failed to precompile Genie [c43c736e-a2d1-11e8-161f-af95117fbd1e] to /home/mksmmi/.julia/compiled/v1.0/Genie/8eazC.ji.
Stacktrace:
[1] error(::String) at ./error.jl:33
[2] macro expansion at ./logging.jl:313 [inlined]
[3] compilecache(::Base.PkgId, ::String) at ./loading.jl:1184
[4] _require(::Base.PkgId) at ./logging.jl:311
[5] require(::Base.PkgId) at ./loading.jl:852
[6] macro expansion at ./logging.jl:311 [inlined]
[7] require(::Module, ::Symbol) at ./loading.jl:834

Install - deprecated packages?

Hello,

I noticed in doc / install:

https://github.com/essenciary/Genie.jl/blame/master/docs/src/index.md#L14

https://github.com/JuliaDB/DBI.jl doesn't seem to be very active and doesn't seem to support Julia 0.7.

julia> using DBI
[ Info: Precompiling DBI [1a78104a-c441-5896-88f2-79e5ca307c3b]
ERROR: LoadError: syntax: extra token "DatabaseSystem" after end of expression
Stacktrace:
 [1] include at ./boot.jl:317 [inlined]
 [2] include_relative(::Module, ::String) at ./loading.jl:1038
 [3] include(::Module, ::String) at ./sysimg.jl:29
 [4] top-level scope at none:2
 [5] eval at ./boot.jl:319 [inlined]
 [6] eval(::Expr) at ./client.jl:399
 [7] top-level scope at ./none:3
in expression starting at /Users/scls/.julia/dev/DBI/src/DBI.jl:25
ERROR: Failed to precompile DBI [1a78104a-c441-5896-88f2-79e5ca307c3b] to /Users/scls/.julia/compiled/v0.7/DBI/tyy23.ji.
Stacktrace:
 [1] error(::String) at ./error.jl:33
 [2] macro expansion at ./logging.jl:313 [inlined]
 [3] compilecache(::Base.PkgId, ::String) at ./loading.jl:1185
 [4] _require(::Base.PkgId) at ./logging.jl:311
 [5] require(::Base.PkgId) at ./loading.jl:852
 [6] macro expansion at ./logging.jl:311 [inlined]
 [7] require(::Module, ::Symbol) at ./loading.jl:834

and

https://github.com/essenciary/Genie.jl/blame/master/docs/src/index.md#L16

https://github.com/JuliaDatabases/PostgreSQL.jl is marked as DEPRECATED
maybe using https://github.com/invenia/LibPQ.jl should be considered.

Kind regards

Dependence on PostgreSQL

PostgreSQL is not in METADATA and from the README seems like it never will be unless someone else takes the reigns. But I notice it is a dependency to run

julia> include(Pkg.dir("Genie","genie.jl"))

I need to run

julia> using PostgreSQL

before genie.jl in v0.5 will run.

Not too serious, but just FYI πŸ‘

EscapeString.jl

...yet another FYI:

EscapeString may or may not be helpful. AccessControl.jl uses it to escape HTML in order to prevent XSS attacks. The package is tiny at this stage, but provides a simple unified interface for escaping strings, handy for web app security. The plan is to build it out as required.

UndefinedVarError Registering Channel/WebSocket

Creating a channel and registering a new websocket catches a critical error.

ex. Route

channel("/movies/subscribe", MoviesChannel.subscribe, named = :ch_movie_subscribe)

ex. JS call

Channels.sendMessageTo('movies', 'subscribe', { 'arg': 'val' } );

When accessed, a critical error is caught near AppServer.jl:75

Tracing back, it looks to be an an UndefinedVarError in Route.jl:540

Extending the ORM to neo4j

How much work would that be?

It has a different querying language and is not a relational dn, but a graph db.

Edit: Maybe I don't need a graph db? I have entities that are related to multiple categories and to each other.

Can this be modelled currently or since tbe relationships will be many to many and there is no multiple inheritance , i would need to add code?

Maybe model composition instead of inheritance to handle the categories?

respond_with_html needs full path

Hi, I'm trying to follow the step by step guide at

https://geniejl.readthedocs.io/en/latest/guides/Step%20by%20step%20app%20development%20with%20Genie/

When I get to adding the line

    respond_with_html("home", "home_page.md")

The home page is broken. To get it to work, I needed to replace this line with the full path to home_page.md:

    respond_with_html("home", "app/resources/home/views/home_page.md")

I've followed through the logic from Genie.Renderer to Genie.Flax and I don't see any path translation going on. Should there be?

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    πŸ–– Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. πŸ“ŠπŸ“ˆπŸŽ‰

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❀️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.