mirego / elixir-boilerplate Goto Github PK
View Code? Open in Web Editor NEW⚗ The stable base upon which we build our Elixir projects at Mirego.
Home Page: https://open.mirego.com
License: BSD 3-Clause "New" or "Revised" License
⚗ The stable base upon which we build our Elixir projects at Mirego.
Home Page: https://open.mirego.com
License: BSD 3-Clause "New" or "Revised" License
Since we use TypeScript in the majority of our SPA projects (React, EmberJs), we could use it in this boilerplate to ensure that all JavaScript we write is typechecked. Everything in the assets
folder is managed by the webpack config, it should be easy to add TypeScript in the existing setup.
Hello 👋
Thank you for putting this repo on github, there are really nice things to learn from it.
I know this isn't really an issue with this repository that I'm writing now, it's more about asking for some help. I apologize in advance if you think this is inappropriate.
I'm trying to run some Phoenix application on Google Cloud Run and I'm having some difficulties for now. It worked a few weeks ago, and without even changing my image, it stopped working at some point.
While trying to search online on how to solve my problem, I found your video (https://www.youtube.com/watch?v=6Jo8WlWq-Fw) and this repo.
So I followed the video and tried to run this repo on Google Cloud Run. And the good news (well, I see that as a good news) is that this repo does not run either.
The bad part is that I don't have much to debug. This is the message that is displayed:
And as you can see, there is absolutely no logs written.
Maybe I did something wrong, because the boilerplate is different from what is shown in the video, so I may have missed an important step while commenting migrations and stuff like that in the code. I'm able to run it locally though, using docker run --rm -it -e PORT=8080 -e SIGNING_SALT=abcde -e SECRET_KEY_BASE=V7SuPpXRJWyBtEP028aEFUzaVS1jnR0sMI6HwRVwzQRo9Z8fcV1HHB0OspZxetCA -p 8080:8080 boilerplate_cloud_run
. The health endpoint returns {"status":"ok","version":"0.0.1"}
But as I said, I cannot run my own project (which is a Phoenix application, without ecto) either. Can anyone who is used to run this on Google Cloud Run tell me if they can still successfully run it if they try to run it right now please?
That would be really helpful to me, in order to know if something is wrong in my project and what I did with this repo, or if there is some kind of compatibility issue with Elixir / BEAM.
Best regards.
When providing a name with multiple CAPS letters such as:
./boilerplate-setup.sh BoubalouSauceBBQ
The result of the configuration change is not what I had in mind!
Actual results
▶ Configuration
ElixirBoilerplate → BoubalouSauceBBQ
elixir_boilerplate → boubalou_sauce_bb_q
elixir-boilerplate → boubalou-sauce-bb-q
Expected results
▶ Configuration
ElixirBoilerplate → BoubalouSauceBBQ
elixir_boilerplate → boubalou_sauce_bbq
elixir-boilerplate → boubalou-sauce-bbq
Since we’re always passing a static_url
configuration to the endpoint:
static_url: [
scheme: Environment.get("STATIC_URL_SCHEME"),
host: Environment.get("STATIC_URL_HOST"),
port: Environment.get("STATIC_URL_PORT")
],
Phoenix always assume we’re using a valid configuration to generate static asset URLs. But sometimes we may not want to provide these variables.
This doesn’t cause any problems when running the application locally (because it falls back to "localhost"
+ PORT
).
But it does cause problems in production, where PORT
is often present (in Heroku, it represents the internal port that the container exposes). So the fallback on "localhost"
+ PORT
doesn’t work anymore.
So we might end up with generated asset URLs such http://localhost:1750/css/app-abc123.css
when we actually want https://example.com/css/app-abc123.css
.
Let’s make sure we implement our own smart fallback 😄
Is this a runtime for Elixir on Google Cloud? what does it differ from https://github.com/GoogleCloudPlatform/elixir-runtime ?
I saw your latest project is using Absinthe for a GraphQL API, will this be implemented into this boilerplate soon?
Therefore, a basic (working) ExMachina setup should be included in this boilerplate project 😄
We should add new_relic_agent
and new_relic_phoenix
since we’re using them in several of our applications.
GitHub Actions Run make prepare step fails while retrieving phoenix framework:
npm ci --prefix assets
npm ERR! Error while executing:
npm ERR! /usr/bin/git ls-remote -h -t ssh://[email protected]/phoenixframework/phoenix.git
npm ERR!
npm ERR! Warning: Permanently added the RSA host key for IP address '140.82.114.4' to the list of known hosts.
npm ERR! [email protected]: Permission denied (publickey).
npm ERR! fatal: Could not read from remote repository.
npm ERR!
npm ERR! Please make sure you have the correct access rights
npm ERR! and the repository exists.
npm ERR!
npm ERR! exited with error code: 128
npm ERR! A complete log of this run can be found in:
npm ERR! /home/runner/.npm/_logs/2021-05-11T19_43_55_927Z-debug.log
make: *** [Makefile:62: prepare] Error 1
Error: Process completed with exit code 2.
Any recommendation for that, per how you use this boilerplate?
Currently README in the USAGE section suggests to delete the internal Git directory (rm -rf .git)
right after cloning. Isn't it better to keep Git directory in order to be able to pull out updates from time to time?
It fails when renaming the files
(...)
\033[0;33m▶ Replacing boilerplate identifiers in file and directory paths\033[0m
mv ./lib/elixir_boilerplate.ex ./lib/my_new_project.ex
mv ./lib/elixir_boilerplate_graphql/elixir_boilerplate_graphql.ex ./lib/my_new_project_graphql/my_new_project_graphql.ex
mv: cannot move './lib/elixir_boilerplate_graphql/elixir_boilerplate_graphql.ex' to './lib/my_new_project_graphql/my_new_project_graphql.ex': No such file or directory
mv ./lib/elixir_boilerplate_health/elixir_boilerplate_health.ex ./lib/my_new_project_health/my_new_project_health.ex
mv: cannot move './lib/elixir_boilerplate_health/elixir_boilerplate_health.ex' to './lib/my_new_project_health/my_new_project_health.ex': No such file or directory
\033[0;32m▶ Done!\n\033[0m
(...)
$ ./boilerplate-setup.sh MyNewProject
find: paths must precede expression: `2'
\033[0;33m▶ Configuration\033[0m
ElixirBoilerplate → MyNewProject
elixir_boilerplate → my_new_project
elixir-boilerplate → my-new-project
\033[0;33m▶ Replacing boilerplate identifiers in content\033[0m
/usr/bin/sed -i s/elixir_boilerplate/my_new_project/g ./.credo.exs
/usr/bin/sed -i s/elixir-boilerplate/my-new-project/g ./.credo.exs
/usr/bin/sed -i s/ElixirBoilerplate/MyNewProject/g ./.credo.exs
/usr/bin/sed -i s/elixir_boilerplate/my_new_project/g ./.env.dev
/usr/bin/sed -i s/elixir-boilerplate/my-new-project/g ./.env.dev
/usr/bin/sed -i s/ElixirBoilerplate/MyNewProject/g ./.env.dev
/usr/bin/sed -i s/elixir_boilerplate/my_new_project/g ./.env.test
/usr/bin/sed -i s/elixir-boilerplate/my-new-project/g ./.env.test
/usr/bin/sed -i s/ElixirBoilerplate/MyNewProject/g ./.env.test
/usr/bin/sed -i s/elixir_boilerplate/my_new_project/g ./.formatter.exs
/usr/bin/sed -i s/elixir-boilerplate/my-new-project/g ./.formatter.exs
/usr/bin/sed -i s/ElixirBoilerplate/MyNewProject/g ./.formatter.exs
/usr/bin/sed -i s/elixir_boilerplate/my_new_project/g ./.github/dependabot.yml
/usr/bin/sed -i s/elixir-boilerplate/my-new-project/g ./.github/dependabot.yml
/usr/bin/sed -i s/ElixirBoilerplate/MyNewProject/g ./.github/dependabot.yml
/usr/bin/sed -i s/elixir_boilerplate/my_new_project/g ./.github/pull_request_template.md
/usr/bin/sed -i s/elixir-boilerplate/my-new-project/g ./.github/pull_request_template.md
/usr/bin/sed -i s/ElixirBoilerplate/MyNewProject/g ./.github/pull_request_template.md
/usr/bin/sed -i s/elixir_boilerplate/my_new_project/g ./.github/workflows/accent.yaml
/usr/bin/sed -i s/elixir-boilerplate/my-new-project/g ./.github/workflows/accent.yaml
/usr/bin/sed -i s/ElixirBoilerplate/MyNewProject/g ./.github/workflows/accent.yaml
/usr/bin/sed -i s/elixir_boilerplate/my_new_project/g ./.github/workflows/ci.yaml
/usr/bin/sed -i s/elixir-boilerplate/my-new-project/g ./.github/workflows/ci.yaml
/usr/bin/sed -i s/ElixirBoilerplate/MyNewProject/g ./.github/workflows/ci.yaml
/usr/bin/sed -i s/elixir_boilerplate/my_new_project/g ./BOILERPLATE_README.fr.md
/usr/bin/sed -i s/elixir-boilerplate/my-new-project/g ./BOILERPLATE_README.fr.md
/usr/bin/sed -i s/ElixirBoilerplate/MyNewProject/g ./BOILERPLATE_README.fr.md
/usr/bin/sed -i s/elixir_boilerplate/my_new_project/g ./BOILERPLATE_README.md
/usr/bin/sed -i s/elixir-boilerplate/my-new-project/g ./BOILERPLATE_README.md
/usr/bin/sed -i s/ElixirBoilerplate/MyNewProject/g ./BOILERPLATE_README.md
/usr/bin/sed -i s/elixir_boilerplate/my_new_project/g ./CHANGELOG.md
/usr/bin/sed -i s/elixir-boilerplate/my-new-project/g ./CHANGELOG.md
/usr/bin/sed -i s/ElixirBoilerplate/MyNewProject/g ./CHANGELOG.md
/usr/bin/sed -i s/elixir_boilerplate/my_new_project/g ./CODE_OF_CONDUCT.md
/usr/bin/sed -i s/elixir-boilerplate/my-new-project/g ./CODE_OF_CONDUCT.md
/usr/bin/sed -i s/ElixirBoilerplate/MyNewProject/g ./CODE_OF_CONDUCT.md
/usr/bin/sed -i s/elixir_boilerplate/my_new_project/g ./CONTRIBUTING.md
/usr/bin/sed -i s/elixir-boilerplate/my-new-project/g ./CONTRIBUTING.md
/usr/bin/sed -i s/ElixirBoilerplate/MyNewProject/g ./CONTRIBUTING.md
/usr/bin/sed -i s/elixir_boilerplate/my_new_project/g ./Dockerfile
/usr/bin/sed -i s/elixir-boilerplate/my-new-project/g ./Dockerfile
/usr/bin/sed -i s/ElixirBoilerplate/MyNewProject/g ./Dockerfile
/usr/bin/sed -i s/elixir_boilerplate/my_new_project/g ./LICENSE.md
/usr/bin/sed -i s/elixir-boilerplate/my-new-project/g ./LICENSE.md
/usr/bin/sed -i s/ElixirBoilerplate/MyNewProject/g ./LICENSE.md
/usr/bin/sed -i s/elixir_boilerplate/my_new_project/g ./Makefile
/usr/bin/sed -i s/elixir-boilerplate/my-new-project/g ./Makefile
/usr/bin/sed -i s/ElixirBoilerplate/MyNewProject/g ./Makefile
/usr/bin/sed -i s/elixir_boilerplate/my_new_project/g ./README.md
/usr/bin/sed -i s/elixir-boilerplate/my-new-project/g ./README.md
/usr/bin/sed -i s/ElixirBoilerplate/MyNewProject/g ./README.md
/usr/bin/sed -i s/elixir_boilerplate/my_new_project/g ./accent.json
/usr/bin/sed -i s/elixir-boilerplate/my-new-project/g ./accent.json
/usr/bin/sed -i s/ElixirBoilerplate/MyNewProject/g ./accent.json
/usr/bin/sed -i s/elixir_boilerplate/my_new_project/g ./assets/.eslintrc.json
/usr/bin/sed -i s/elixir-boilerplate/my-new-project/g ./assets/.eslintrc.json
/usr/bin/sed -i s/ElixirBoilerplate/MyNewProject/g ./assets/.eslintrc.json
/usr/bin/sed -i s/elixir_boilerplate/my_new_project/g ./assets/js/app.js
/usr/bin/sed -i s/elixir-boilerplate/my-new-project/g ./assets/js/app.js
/usr/bin/sed -i s/ElixirBoilerplate/MyNewProject/g ./assets/js/app.js
/usr/bin/sed -i s/elixir_boilerplate/my_new_project/g ./assets/package-lock.json
/usr/bin/sed -i s/elixir-boilerplate/my-new-project/g ./assets/package-lock.json
/usr/bin/sed -i s/ElixirBoilerplate/MyNewProject/g ./assets/package-lock.json
/usr/bin/sed -i s/elixir_boilerplate/my_new_project/g ./assets/package.json
/usr/bin/sed -i s/elixir-boilerplate/my-new-project/g ./assets/package.json
/usr/bin/sed -i s/ElixirBoilerplate/MyNewProject/g ./assets/package.json
/usr/bin/sed -i s/elixir_boilerplate/my_new_project/g ./assets/prettier.config.js
/usr/bin/sed -i s/elixir-boilerplate/my-new-project/g ./assets/prettier.config.js
/usr/bin/sed -i s/ElixirBoilerplate/MyNewProject/g ./assets/prettier.config.js
/usr/bin/sed -i s/elixir_boilerplate/my_new_project/g ./assets/stylelint.config.js
/usr/bin/sed -i s/elixir-boilerplate/my-new-project/g ./assets/stylelint.config.js
/usr/bin/sed -i s/ElixirBoilerplate/MyNewProject/g ./assets/stylelint.config.js
/usr/bin/sed -i s/elixir_boilerplate/my_new_project/g ./config/config.exs
/usr/bin/sed -i s/elixir-boilerplate/my-new-project/g ./config/config.exs
/usr/bin/sed -i s/ElixirBoilerplate/MyNewProject/g ./config/config.exs
/usr/bin/sed -i s/elixir_boilerplate/my_new_project/g ./config/dev.exs
/usr/bin/sed -i s/elixir-boilerplate/my-new-project/g ./config/dev.exs
/usr/bin/sed -i s/ElixirBoilerplate/MyNewProject/g ./config/dev.exs
/usr/bin/sed -i s/elixir_boilerplate/my_new_project/g ./config/prod.exs
/usr/bin/sed -i s/elixir-boilerplate/my-new-project/g ./config/prod.exs
/usr/bin/sed -i s/ElixirBoilerplate/MyNewProject/g ./config/prod.exs
/usr/bin/sed -i s/elixir_boilerplate/my_new_project/g ./config/runtime.exs
/usr/bin/sed -i s/elixir-boilerplate/my-new-project/g ./config/runtime.exs
/usr/bin/sed -i s/ElixirBoilerplate/MyNewProject/g ./config/runtime.exs
/usr/bin/sed -i s/elixir_boilerplate/my_new_project/g ./config/test.exs
/usr/bin/sed -i s/elixir-boilerplate/my-new-project/g ./config/test.exs
/usr/bin/sed -i s/ElixirBoilerplate/MyNewProject/g ./config/test.exs
/usr/bin/sed -i s/elixir_boilerplate/my_new_project/g ./coveralls.json
/usr/bin/sed -i s/elixir-boilerplate/my-new-project/g ./coveralls.json
/usr/bin/sed -i s/ElixirBoilerplate/MyNewProject/g ./coveralls.json
/usr/bin/sed -i s/elixir_boilerplate/my_new_project/g ./docker-compose.yml
/usr/bin/sed -i s/elixir-boilerplate/my-new-project/g ./docker-compose.yml
/usr/bin/sed -i s/ElixirBoilerplate/MyNewProject/g ./docker-compose.yml
/usr/bin/sed -i s/elixir_boilerplate/my_new_project/g ./docs/module-naming.fr.md
/usr/bin/sed -i s/elixir-boilerplate/my-new-project/g ./docs/module-naming.fr.md
/usr/bin/sed -i s/ElixirBoilerplate/MyNewProject/g ./docs/module-naming.fr.md
/usr/bin/sed -i s/elixir_boilerplate/my_new_project/g ./lib/elixir_boilerplate.ex
/usr/bin/sed -i s/elixir-boilerplate/my-new-project/g ./lib/elixir_boilerplate.ex
/usr/bin/sed -i s/ElixirBoilerplate/MyNewProject/g ./lib/elixir_boilerplate.ex
/usr/bin/sed -i s/elixir_boilerplate/my_new_project/g ./lib/elixir_boilerplate/application.ex
/usr/bin/sed -i s/elixir-boilerplate/my-new-project/g ./lib/elixir_boilerplate/application.ex
/usr/bin/sed -i s/ElixirBoilerplate/MyNewProject/g ./lib/elixir_boilerplate/application.ex
/usr/bin/sed -i s/elixir_boilerplate/my_new_project/g ./lib/elixir_boilerplate/config.ex
/usr/bin/sed -i s/elixir-boilerplate/my-new-project/g ./lib/elixir_boilerplate/config.ex
/usr/bin/sed -i s/ElixirBoilerplate/MyNewProject/g ./lib/elixir_boilerplate/config.ex
/usr/bin/sed -i s/elixir_boilerplate/my_new_project/g ./lib/elixir_boilerplate/gettext.ex
/usr/bin/sed -i s/elixir-boilerplate/my-new-project/g ./lib/elixir_boilerplate/gettext.ex
/usr/bin/sed -i s/ElixirBoilerplate/MyNewProject/g ./lib/elixir_boilerplate/gettext.ex
/usr/bin/sed -i s/elixir_boilerplate/my_new_project/g ./lib/elixir_boilerplate/release.ex
/usr/bin/sed -i s/elixir-boilerplate/my-new-project/g ./lib/elixir_boilerplate/release.ex
/usr/bin/sed -i s/ElixirBoilerplate/MyNewProject/g ./lib/elixir_boilerplate/release.ex
/usr/bin/sed -i s/elixir_boilerplate/my_new_project/g ./lib/elixir_boilerplate/repo.ex
/usr/bin/sed -i s/elixir-boilerplate/my-new-project/g ./lib/elixir_boilerplate/repo.ex
/usr/bin/sed -i s/ElixirBoilerplate/MyNewProject/g ./lib/elixir_boilerplate/repo.ex
/usr/bin/sed -i s/elixir_boilerplate/my_new_project/g ./lib/elixir_boilerplate_graphql/application/types.ex
/usr/bin/sed -i s/elixir-boilerplate/my-new-project/g ./lib/elixir_boilerplate_graphql/application/types.ex
/usr/bin/sed -i s/ElixirBoilerplate/MyNewProject/g ./lib/elixir_boilerplate_graphql/application/types.ex
/usr/bin/sed -i s/elixir_boilerplate/my_new_project/g ./lib/elixir_boilerplate_graphql/elixir_boilerplate_graphql.ex
/usr/bin/sed -i s/elixir-boilerplate/my-new-project/g ./lib/elixir_boilerplate_graphql/elixir_boilerplate_graphql.ex
/usr/bin/sed -i s/ElixirBoilerplate/MyNewProject/g ./lib/elixir_boilerplate_graphql/elixir_boilerplate_graphql.ex
/usr/bin/sed -i s/elixir_boilerplate/my_new_project/g ./lib/elixir_boilerplate_graphql/middleware/error_reporting.ex
/usr/bin/sed -i s/elixir-boilerplate/my-new-project/g ./lib/elixir_boilerplate_graphql/middleware/error_reporting.ex
/usr/bin/sed -i s/ElixirBoilerplate/MyNewProject/g ./lib/elixir_boilerplate_graphql/middleware/error_reporting.ex
/usr/bin/sed -i s/elixir_boilerplate/my_new_project/g ./lib/elixir_boilerplate_graphql/middleware/operation_name_logger.ex
/usr/bin/sed -i s/elixir-boilerplate/my-new-project/g ./lib/elixir_boilerplate_graphql/middleware/operation_name_logger.ex
/usr/bin/sed -i s/ElixirBoilerplate/MyNewProject/g ./lib/elixir_boilerplate_graphql/middleware/operation_name_logger.ex
/usr/bin/sed -i s/elixir_boilerplate/my_new_project/g ./lib/elixir_boilerplate_graphql/plugs/context.ex
/usr/bin/sed -i s/elixir-boilerplate/my-new-project/g ./lib/elixir_boilerplate_graphql/plugs/context.ex
/usr/bin/sed -i s/ElixirBoilerplate/MyNewProject/g ./lib/elixir_boilerplate_graphql/plugs/context.ex
/usr/bin/sed -i s/elixir_boilerplate/my_new_project/g ./lib/elixir_boilerplate_graphql/router.ex
/usr/bin/sed -i s/elixir-boilerplate/my-new-project/g ./lib/elixir_boilerplate_graphql/router.ex
/usr/bin/sed -i s/ElixirBoilerplate/MyNewProject/g ./lib/elixir_boilerplate_graphql/router.ex
/usr/bin/sed -i s/elixir_boilerplate/my_new_project/g ./lib/elixir_boilerplate_graphql/schema.ex
/usr/bin/sed -i s/elixir-boilerplate/my-new-project/g ./lib/elixir_boilerplate_graphql/schema.ex
/usr/bin/sed -i s/ElixirBoilerplate/MyNewProject/g ./lib/elixir_boilerplate_graphql/schema.ex
/usr/bin/sed -i s/elixir_boilerplate/my_new_project/g ./lib/elixir_boilerplate_health/elixir_boilerplate_health.ex
/usr/bin/sed -i s/elixir-boilerplate/my-new-project/g ./lib/elixir_boilerplate_health/elixir_boilerplate_health.ex
/usr/bin/sed -i s/ElixirBoilerplate/MyNewProject/g ./lib/elixir_boilerplate_health/elixir_boilerplate_health.ex
/usr/bin/sed -i s/elixir_boilerplate/my_new_project/g ./lib/elixir_boilerplate_health/router.ex
/usr/bin/sed -i s/elixir-boilerplate/my-new-project/g ./lib/elixir_boilerplate_health/router.ex
/usr/bin/sed -i s/ElixirBoilerplate/MyNewProject/g ./lib/elixir_boilerplate_health/router.ex
/usr/bin/sed -i s/elixir_boilerplate/my_new_project/g ./lib/elixir_boilerplate_web/endpoint.ex
/usr/bin/sed -i s/elixir-boilerplate/my-new-project/g ./lib/elixir_boilerplate_web/endpoint.ex
/usr/bin/sed -i s/ElixirBoilerplate/MyNewProject/g ./lib/elixir_boilerplate_web/endpoint.ex
/usr/bin/sed -i s/elixir_boilerplate/my_new_project/g ./lib/elixir_boilerplate_web/errors/errors.ex
/usr/bin/sed -i s/elixir-boilerplate/my-new-project/g ./lib/elixir_boilerplate_web/errors/errors.ex
/usr/bin/sed -i s/ElixirBoilerplate/MyNewProject/g ./lib/elixir_boilerplate_web/errors/errors.ex
/usr/bin/sed -i s/elixir_boilerplate/my_new_project/g ./lib/elixir_boilerplate_web/errors/view.ex
/usr/bin/sed -i s/elixir-boilerplate/my-new-project/g ./lib/elixir_boilerplate_web/errors/view.ex
/usr/bin/sed -i s/ElixirBoilerplate/MyNewProject/g ./lib/elixir_boilerplate_web/errors/view.ex
/usr/bin/sed -i s/elixir_boilerplate/my_new_project/g ./lib/elixir_boilerplate_web/home/controller.ex
/usr/bin/sed -i s/elixir-boilerplate/my-new-project/g ./lib/elixir_boilerplate_web/home/controller.ex
/usr/bin/sed -i s/ElixirBoilerplate/MyNewProject/g ./lib/elixir_boilerplate_web/home/controller.ex
/usr/bin/sed -i s/elixir_boilerplate/my_new_project/g ./lib/elixir_boilerplate_web/home/view.ex
/usr/bin/sed -i s/elixir-boilerplate/my-new-project/g ./lib/elixir_boilerplate_web/home/view.ex
/usr/bin/sed -i s/ElixirBoilerplate/MyNewProject/g ./lib/elixir_boilerplate_web/home/view.ex
/usr/bin/sed -i s/elixir_boilerplate/my_new_project/g ./lib/elixir_boilerplate_web/layouts/view.ex
/usr/bin/sed -i s/elixir-boilerplate/my-new-project/g ./lib/elixir_boilerplate_web/layouts/view.ex
/usr/bin/sed -i s/ElixirBoilerplate/MyNewProject/g ./lib/elixir_boilerplate_web/layouts/view.ex
/usr/bin/sed -i s/elixir_boilerplate/my_new_project/g ./lib/elixir_boilerplate_web/plugs/security.ex
/usr/bin/sed -i s/elixir-boilerplate/my-new-project/g ./lib/elixir_boilerplate_web/plugs/security.ex
/usr/bin/sed -i s/ElixirBoilerplate/MyNewProject/g ./lib/elixir_boilerplate_web/plugs/security.ex
/usr/bin/sed -i s/elixir_boilerplate/my_new_project/g ./lib/elixir_boilerplate_web/router.ex
/usr/bin/sed -i s/elixir-boilerplate/my-new-project/g ./lib/elixir_boilerplate_web/router.ex
/usr/bin/sed -i s/ElixirBoilerplate/MyNewProject/g ./lib/elixir_boilerplate_web/router.ex
/usr/bin/sed -i s/elixir_boilerplate/my_new_project/g ./lib/elixir_boilerplate_web/socket.ex
/usr/bin/sed -i s/elixir-boilerplate/my-new-project/g ./lib/elixir_boilerplate_web/socket.ex
/usr/bin/sed -i s/ElixirBoilerplate/MyNewProject/g ./lib/elixir_boilerplate_web/socket.ex
/usr/bin/sed -i s/elixir_boilerplate/my_new_project/g ./mix.exs
/usr/bin/sed -i s/elixir-boilerplate/my-new-project/g ./mix.exs
/usr/bin/sed -i s/ElixirBoilerplate/MyNewProject/g ./mix.exs
/usr/bin/sed -i s/elixir_boilerplate/my_new_project/g ./package-lock.json
/usr/bin/sed -i s/elixir-boilerplate/my-new-project/g ./package-lock.json
/usr/bin/sed -i s/ElixirBoilerplate/MyNewProject/g ./package-lock.json
/usr/bin/sed -i s/elixir_boilerplate/my_new_project/g ./package.json
/usr/bin/sed -i s/elixir-boilerplate/my-new-project/g ./package.json
/usr/bin/sed -i s/ElixirBoilerplate/MyNewProject/g ./package.json
/usr/bin/sed -i s/elixir_boilerplate/my_new_project/g ./priv/repo/dummy.exs
/usr/bin/sed -i s/elixir-boilerplate/my-new-project/g ./priv/repo/dummy.exs
/usr/bin/sed -i s/ElixirBoilerplate/MyNewProject/g ./priv/repo/dummy.exs
/usr/bin/sed -i s/elixir_boilerplate/my_new_project/g ./priv/repo/seeds.exs
/usr/bin/sed -i s/elixir-boilerplate/my-new-project/g ./priv/repo/seeds.exs
/usr/bin/sed -i s/ElixirBoilerplate/MyNewProject/g ./priv/repo/seeds.exs
/usr/bin/sed -i s/elixir_boilerplate/my_new_project/g ./rel/overlays/bin/migrate
/usr/bin/sed -i s/elixir-boilerplate/my-new-project/g ./rel/overlays/bin/migrate
/usr/bin/sed -i s/ElixirBoilerplate/MyNewProject/g ./rel/overlays/bin/migrate
/usr/bin/sed -i s/elixir_boilerplate/my_new_project/g ./rel/overlays/bin/server
/usr/bin/sed -i s/elixir-boilerplate/my-new-project/g ./rel/overlays/bin/server
/usr/bin/sed -i s/ElixirBoilerplate/MyNewProject/g ./rel/overlays/bin/server
/usr/bin/sed -i s/elixir_boilerplate/my_new_project/g ./test/elixir_boilerplate/factory_test.exs
/usr/bin/sed -i s/elixir-boilerplate/my-new-project/g ./test/elixir_boilerplate/factory_test.exs
/usr/bin/sed -i s/ElixirBoilerplate/MyNewProject/g ./test/elixir_boilerplate/factory_test.exs
/usr/bin/sed -i s/elixir_boilerplate/my_new_project/g ./test/elixir_boilerplate/gettext_interpolation_test.exs
/usr/bin/sed -i s/elixir-boilerplate/my-new-project/g ./test/elixir_boilerplate/gettext_interpolation_test.exs
/usr/bin/sed -i s/ElixirBoilerplate/MyNewProject/g ./test/elixir_boilerplate/gettext_interpolation_test.exs
/usr/bin/sed -i s/elixir_boilerplate/my_new_project/g ./test/elixir_boilerplate_web/errors/view_test.exs
/usr/bin/sed -i s/elixir-boilerplate/my-new-project/g ./test/elixir_boilerplate_web/errors/view_test.exs
/usr/bin/sed -i s/ElixirBoilerplate/MyNewProject/g ./test/elixir_boilerplate_web/errors/view_test.exs
/usr/bin/sed -i s/elixir_boilerplate/my_new_project/g ./test/elixir_boilerplate_web/errors_test.exs
/usr/bin/sed -i s/elixir-boilerplate/my-new-project/g ./test/elixir_boilerplate_web/errors_test.exs
/usr/bin/sed -i s/ElixirBoilerplate/MyNewProject/g ./test/elixir_boilerplate_web/errors_test.exs
/usr/bin/sed -i s/elixir_boilerplate/my_new_project/g ./test/elixir_boilerplate_web/health_test.exs
/usr/bin/sed -i s/elixir-boilerplate/my-new-project/g ./test/elixir_boilerplate_web/health_test.exs
/usr/bin/sed -i s/ElixirBoilerplate/MyNewProject/g ./test/elixir_boilerplate_web/health_test.exs
/usr/bin/sed -i s/elixir_boilerplate/my_new_project/g ./test/elixir_boilerplate_web/home/controller_test.exs
/usr/bin/sed -i s/elixir-boilerplate/my-new-project/g ./test/elixir_boilerplate_web/home/controller_test.exs
/usr/bin/sed -i s/ElixirBoilerplate/MyNewProject/g ./test/elixir_boilerplate_web/home/controller_test.exs
/usr/bin/sed -i s/elixir_boilerplate/my_new_project/g ./test/elixir_boilerplate_web/ping_test.exs
/usr/bin/sed -i s/elixir-boilerplate/my-new-project/g ./test/elixir_boilerplate_web/ping_test.exs
/usr/bin/sed -i s/ElixirBoilerplate/MyNewProject/g ./test/elixir_boilerplate_web/ping_test.exs
/usr/bin/sed -i s/elixir_boilerplate/my_new_project/g ./test/support/channel_case.ex
/usr/bin/sed -i s/elixir-boilerplate/my-new-project/g ./test/support/channel_case.ex
/usr/bin/sed -i s/ElixirBoilerplate/MyNewProject/g ./test/support/channel_case.ex
/usr/bin/sed -i s/elixir_boilerplate/my_new_project/g ./test/support/conn_case.ex
/usr/bin/sed -i s/elixir-boilerplate/my-new-project/g ./test/support/conn_case.ex
/usr/bin/sed -i s/ElixirBoilerplate/MyNewProject/g ./test/support/conn_case.ex
/usr/bin/sed -i s/elixir_boilerplate/my_new_project/g ./test/support/data_case.ex
/usr/bin/sed -i s/elixir-boilerplate/my-new-project/g ./test/support/data_case.ex
/usr/bin/sed -i s/ElixirBoilerplate/MyNewProject/g ./test/support/data_case.ex
/usr/bin/sed -i s/elixir_boilerplate/my_new_project/g ./test/support/factory.ex
/usr/bin/sed -i s/elixir-boilerplate/my-new-project/g ./test/support/factory.ex
/usr/bin/sed -i s/ElixirBoilerplate/MyNewProject/g ./test/support/factory.ex
/usr/bin/sed -i s/elixir_boilerplate/my_new_project/g ./test/support/gettext_interpolation.ex
/usr/bin/sed -i s/elixir-boilerplate/my-new-project/g ./test/support/gettext_interpolation.ex
/usr/bin/sed -i s/ElixirBoilerplate/MyNewProject/g ./test/support/gettext_interpolation.ex
/usr/bin/sed -i s/elixir_boilerplate/my_new_project/g ./test/test_helper.exs
/usr/bin/sed -i s/elixir-boilerplate/my-new-project/g ./test/test_helper.exs
/usr/bin/sed -i s/ElixirBoilerplate/MyNewProject/g ./test/test_helper.exs
\033[0;32m▶ Done!\n\033[0m
\033[0;33m▶ Replacing boilerplate identifiers in file and directory paths\033[0m
mv ./lib/elixir_boilerplate.ex ./lib/my_new_project.ex
mv ./lib/elixir_boilerplate_graphql/elixir_boilerplate_graphql.ex ./lib/my_new_project_graphql/my_new_project_graphql.ex
mv: cannot move './lib/elixir_boilerplate_graphql/elixir_boilerplate_graphql.ex' to './lib/my_new_project_graphql/my_new_project_graphql.ex': No such file or directory
mv ./lib/elixir_boilerplate_health/elixir_boilerplate_health.ex ./lib/my_new_project_health/my_new_project_health.ex
mv: cannot move './lib/elixir_boilerplate_health/elixir_boilerplate_health.ex' to './lib/my_new_project_health/my_new_project_health.ex': No such file or directory
\033[0;32m▶ Done!\n\033[0m
\033[0;33m▶ Importing project README.md and README.fr.md\033[0m
rm -fr README.md && mv BOILERPLATE_README.md README.md && mv BOILERPLATE_README.fr.md README.fr.md
\033[0;32m▶ Done!\n\033[0m
\033[0;33m▶ Removing boilerplate license → https://choosealicense.com\033[0m
rm -fr LICENSE.md
\033[0;32m▶ Done!\n\033[0m
\033[0;33m▶ Removing boilerplate changelog\033[0m
rm -fr CHANGELOG.md
\033[0;32m▶ Done!\n\033[0m
\033[0;33m▶ Removing boilerplate code of conduct and contribution information → https://help.github.com/articles/setting-guidelines-for-repository-contributors/\033[0m
rm -fr CODE_OF_CONDUCT.md CONTRIBUTING.md
\033[0;32m▶ Done!\n\033[0m
\033[0;33m▶ Removing boilerplate setup script\033[0m
rm -fr boilerplate-setup.sh
\033[0;32m▶ Done!\n\033[0m
fly.io seems to be all the rage in the elixir community nowadays - I was thinking that it would be great to have some sort of fly.io deployment steps in the project setup
Since we use Corsica in the majority of our project, we could use it in this boilerplate like we do plug_canonical_host
or basic_auth
— only enable it if a CORS_ALLOWED_ORIGINS
environment variable is present.
It seems that initializing the project can be done a bit more handy with Aqua template engine. It's generaly created for this purposes.
With small changes the project can be boilerplated using
mix aqua new boilerplate MyApp
with optional docker (for example):
mix aqua new boilerplate MyApp --no-docker
With auto predefined Elixir versions, and better discovered project_name
changes.
If it's possible - I can do this for the project, just want to be sure that it has any sence.
make dependencies
fails saying You are using Node.js 10.15.3 but the required version specified in package.json is 10.14.2
If this is not a strict requirements, package.json could be changed to >=10.14.2
(I can make this simple change and send a PR, but want to understand if it would be OK)
Hi! Thanks for making this open source! This is an amazing resource for the community!
I have a question about SoBelow
errors/best practices:
I see that you ignore
Config.HTTPS
(https://github.com/mirego/elixir-boilerplate/blob/master/.sobelow-conf#L8)
This is interesting because I've seen this be triggered even when there is no
http connection whatsoever, so it makes sense that you ignored it.
My question has to do with the Config.CSP
check that you don't ignore and actually solve.
In a fresh phx.new
app, sobelow
cries because it doesn't find the map in
plug :put_secure_browser_headers
in router.ex
I actually wanted to learn more about this issue. So I created this:
nccgroup/sobelow#61 which eventually led to a patch
on their docs here: nccgroup/sobelow#62
Then, I stumbled upon how you solve the problem:
https://github.com/mirego/elixir-boilerplate/blob/master/lib/elixir_boilerplate_web/content_security_policy.ex#L1
I was wondering if there is anything we can do. Maybe we:
sobelow
itself is somewhat new, maybe this isAnyways, thanks for the OSS work, I really appreciate your time. ❤️ 💜
(I'm new to elixir/phoenix development - so please pardon my ignorance)
As the title says http entry is missing from dev.exs
, without it I get (RuntimeError) server can't start because :port in http config is nil, please use a valid port number
when I run iex -S phx.server
When I added the following line to dev.exs
the error went away
http: [port: System.get_env("PORT") || 4000
(Found the above here)
On a related note : Is there a reason config/dev.exs
and config/test.exs
so different ?
test.exs
has secret and signing salt hard coded, while dev
(is supposed to , I think) get it from .env.dev.local
Sed on MacOS and Linux behave a tiny bit different. -i ''
works on MacOS, but will fail on Linux.
An example resolution that I'll paste-in-place here:
For support on both OSX and Linux, I use a simple if check to see if the bash script is running on OSX or Linux, and adjust the command's -i argument based on that.
if [[ "$OSTYPE" == "darwin"* ]]; then sed -i '' -e 's|$iconPath|images-theme-dark/$iconfile|g' "{}" else sed -i -e 's|$iconPath|images-theme-dark/$iconfile|g' "{}" fi
Source: https://stackoverflow.com/a/57766728
Based on the difference a viable solution might be to proxy the call to sed
:
if [[ "$OSTYPE" == "darwin"* ]]; then
sed_command = sed -i ''
else
sed_command = sed -i
fi
This is the default, to keep the same version as the mix package:
package.json
"dependencies": {
"phoenix": "file:../deps/phoenix",
"phoenix_html": "file:../deps/phoenix_html",
"phoenix_live_view": "file:../deps/phoenix_live_view",
result:
Step 5/42 : COPY assets assets
--
151 | ---> 9060e2a6e703
152 | Step 6/42 : RUN npm ci --prefix assets --no-audit --no-color --unsafe-perm
153 | ---> Running in e40b93be0361
154 | npm ERR! code ENOENT
155 | npm ERR! syscall open
156 | npm ERR! path /build/assets/node_modules/phoenix/package.json
157 | npm ERR! errno -2
158 | npm ERR! enoent ENOENT: no such file or directory, open '/build/assets/node_modules/phoenix/package.json'
159 | npm ERR! enoent This is related to npm not being able to find a file.
160 | npm ERR! enoent
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.