falood / exsync Goto Github PK
View Code? Open in Web Editor NEWYet another elixir reloader.
License: BSD 3-Clause "New" or "Revised" License
Yet another elixir reloader.
License: BSD 3-Clause "New" or "Revised" License
Due to the nature of file system events, mix compile is often called multiple times. Instead it should be debounced.
I have a module which relies on external file.
This external file is declared as a resource.
When I change this external resource the module does not recompile.
Is it possible to get these changes picked up by exsync?
require EEx
@external_resource Path.join(__DIR__, "./templates/home_page.html.eex")
EEx.function_from_file(:defp, :home_page, Path.join(__DIR__, "./templates/home_page.html.eex"), [:greeting])
@falood can we change the default branch of this repo to main
to match many other repos (and the new default)? I don't have the permissions on this repo to make that change.
Is it possible to push a new release with all the latest improvements? I mainly want the MFA callback
Thanks! Awesome project, really helps me to develop inside my iex
shell.
But, these logs are spamming my iex
:
[debug] Defaulting to enable source monitor, set config :exsync, src_monitor: false to disable
[info] ExSync source monitor started.
[info] ExSync beam monitor started.
Can you please make a setting to disable them?
I followed the instructions in the readme, ran mix deps.get
, but when I run iex -S mix
, I get the following:
** (EXIT) an exception was raised:
** (UndefinedFunctionError) function :inotifywait.find_executable/0 is undefined (module :inotifywait is not available)
:inotifywait.find_executable()
(exfswatch) lib/exfswatch.ex:19: ExFSWatch.start/2
(kernel) application_master.erl:273: :application_master.start_it_old/4
Likely broken on OTP 26 or Elixir 1.15
in lib/exsync/config.ex
changing:
- [Mix.Project.compile_path() | dep_paths]
+ [Mix.Project.build_path]
Is a quick fix.
But ideally we need to figure out which version this breaks on and check the version (or just add build_path alongside the individual dep_paths)
Env:
config.exs
defmodule DvbUpgradeServer.Mixfile do
use Mix.Project
def project do
[app: :dvb_upgrade_server,
version: "0.0.1",
elixir: "~> 1.0",
build_embedded: Mix.env == :prod,
start_permanent: Mix.env == :prod,
deps: deps]
end
# Configuration for the OTP application
#
# Type `mix help compile.app` for more information
def application do
[applications: [:logger, :exsync],
mod: {DvbUpgradeServer, []}]
end
# Dependencies can be Hex packages:
#
# {:mydep, "~> 0.3.0"}
#
# Or git/path repositories:
#
# {:mydep, git: "https://github.com/elixir-lang/mydep.git", tag: "0.1.0"}
#
# Type `mix help deps` for more examples and options
defp deps do
[
{:exsync, "~> 0.0.2", only: :dev}
]
end
end
OS: Mac OS X 10.10 Yosemite
iex(2)> DvbUpgradeServer.Worker.get_v
** (UndefinedFunctionError) undefined function: DvbUpgradeServer.Worker.get_v/0
(dvb_upgrade_server) DvbUpgradeServer.Worker.get_v()
I couldn't get it to reload any files after adding it as a dependency and starting the :exsync
application. Are there any further steps needed to have the modules reloaded when the source file changes?
I have a routing DSL that deliberately throws errors during the compilation step if controllers are not defined correctly. The error messages are very useful and are shown if manually calling recompile.
e.g.
iex(1)> recompile
Compiling 1 file (.ex)
== Compilation error in file lib/www.ex ==
** (RuntimeError) module WWW.HomePagezz is not loaded
(raxx) lib/raxx/router.ex:51: anonymous fn/3 in Raxx.Router."MACRO-__using__"/2
(elixir) lib/enum.ex:1826: Enum."-reduce/3-lists^foldl/2-0-"/3
(raxx) expanding macro: Raxx.Router.__using__/1
lib/www.ex:9: WWW (module)
(elixir) expanding macro: Kernel.use/2
lib/www.ex:9: WWW (module)
(tokumei) expanding macro: Raxx.Blueprint.__using__/1
lib/www.ex:9: WWW (module)
When using ExSync. There is simply no output if recompilation fails. Is there a configuration that allows me to show the same errors as I would get for calling recompile.
When I save a file in Panic Nova, code reloading doesn't occur. No messages appear in the console and also if I add functions and try to call them, they don't exist.
If I open the same file in emacs and make those changes, everything works as expected.
Can editors bypass the fileystem notifications or intercept them for their own purposes?
Example that I was having trouble with:
# TODO: Passing a list to debug appears to be broken
ExSync.Logger.debug([inspect(action), " changes to ", inspect(path), "\n"])
Compiling 6 files (.ex)
warning: variable "self" does not exist and is being expanded to "self()", please use parentheses to remove the ambiguity or change the variable name
lib/exsync.ex:11
warning: variable "beam_dirs" does not exist and is being expanded to "beam_dirs()", please use parentheses to remove the ambiguity or change the variable name
lib/exsync/config.ex:9
warning: Dict.values/1 is deprecated, use the Map module for working with maps or the Keyword module for working with keyword lists
lib/exsync/config.ex:24
warning: Dict.take/2 is deprecated, use the Map module for working with maps or the Keyword module for working with keyword lists
lib/exsync/config.ex:23
warning: variable "app_source_dir" does not exist and is being expanded to "app_source_dir()", please use parentheses to remove the ambiguity or change the variable name
lib/exsync/config.ex:25
warning: variable "src_dirs" does not exist and is being expanded to "src_dirs()", please use parentheses to remove the ambiguity or change the variable name
lib/exsync/config.ex:19
ExSync is working fine for reloading code. But not overwriting the prompt would be nice, so when I try this:
iex(3)> ExSync.register_group_leader()
** (UndefinedFunctionError) function ExSync.register_group_leader/0 is undefined or private
(exsync 0.2.4) ExSync.register_group_leader()
I think I have a use for the ExSync code where having it be an Application
doesn't fit. The details are probably not interesting, but briefly: I'm writing a testing-support Phoenix localhost webapp that reloads the _build
files from an independent Mix project, where the location of that project isn't known at Mix startup time (so can't be put in a config.exs
file).
The ExSync code is going to work fine for this. (Thank you!) If you like, I can code my fork so that falood/exsync
could get pull requests that allow it to be used as either an application or a library. If you don't think that's useful for this project, I won't. My use is, I think, very atypical if not downright weird. Producing mergeable code is more work for me, but I feel I should thank you for exsync by making the offer.
Hello, I followed the instructions and running iex -S mix exsync
causes the applications in my umbrella app not to start.
I managed to workaround it by adding :application.start(:exsync)
on my .iex.exs (found that was better than adding the dependency to some mix.exs of the apps in the umbrella).
This has the problem that I no longer get the ExSync output on my console, but the functionality seems to be there.
Is there a better solution that I'm missing?
Hello!
I'm using it for umbrella app and don't see any recompilation errors in output. The only message I get is about reload is complete.
Hi,
I was wondering why you made "Yet another reloader". It works great for me and was the first one I came across. Would you consider adding a list of alternatives to the README if this was just an experiment. or consider adding a few lines as to why its better/different to the other elixir reloaders?
Hi!
I can't make exsync to work on my project. I'm using an umbrella to hold all of our projects together, and the only working situation is on one of the projects. Tried to make it work on each one of the three projects by referencing exsync on them, but that didn't worked as well...
Is umbrella projects supported?
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.