genieframework / genie.jl Goto Github PK
View Code? Open in Web Editor NEWπ§The highly productive Julia web framework
Home Page: https://genieframework.com
License: MIT License
π§The highly productive Julia web framework
Home Page: https://genieframework.com
License: MIT License
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:
In the browser, I get error
"404 Not Found
Oh dear, no page here!
Sorry, we can not find /"
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.
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
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()
Any plans for a CMS?
Or would it be possible to integrate with a html CMS myself?
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 π
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.
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!
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-repo
https://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"))`
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
I tried to visit you site but the page doesn't work, it's blank.
Which version of julia should I use?
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
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?
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:
Pkg.resolve()
.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
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.
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?
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.
Pre 1.0:
Pkg.clone("https://github.com/essenciary/Genie.jl")
Post 1.0:
Julia> ]
(v1.0) pkg> add https://github.com/essenciary/Genie.jl
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 :(
...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.
Under which license is Genie.jl distributed ?
I haven't found any precise information for now.
Thanks
Oli
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)
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
Just a dumb question, but is this the same thing as serializing & deserializing? Because it seems like a poor name if so.
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.
Hi Adrian! I would appreciate your help!
https://gist.github.com/hpoit/6a036f8f562c9f7abb95aeb3124e788b
Version changes have been happening at the speed of light, I'm busy just keeping up with them.
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.
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.
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.
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
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!
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 π
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.
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
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
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
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..).
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!
'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.
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
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)
`
In the top right, the link to "Discover Julia Packages" points here: http://genieframework.com/packages which returns a 502 error.
Can you have ability to interop with http://escher-jl.org/ and re use pages writen for it.
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!
@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?
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.
A declarative, efficient, and flexible JavaScript library for building user interfaces.
π Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.
TypeScript is a superset of JavaScript that compiles to clean JavaScript output.
An Open Source Machine Learning Framework for Everyone
The Web framework for perfectionists with deadlines.
A PHP framework for web artisans
Bring data to life with SVG, Canvas and HTML. πππ
JavaScript (JS) is a lightweight interpreted programming language with first-class functions.
Some thing interesting about web. New door for the world.
A server is a program made to process requests and deliver data to clients.
Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.
Some thing interesting about visualization, use data art
Some thing interesting about game, make everyone happy.
We are working to build community through open source technology. NB: members must have two-factor auth.
Open source projects and samples from Microsoft.
Google β€οΈ Open Source for everyone.
Alibaba Open Source for everyone
Data-Driven Documents codes.
China tencent open source team.