gigalixir / gigalixir-cli Goto Github PK
View Code? Open in Web Editor NEWLicense: MIT License
License: MIT License
Hi,
Just a possible note for the docs. If you have Python installed via asdf
, when you run pip3 install gigalixir
, the installed binary will not end up in ~/.local/bin
. In fact, it ends up in ~/.asdf/installs/python/3.8.2/bin
(of course the version string will differ based on the version of Python you have installed.
You may have to re-shim asdf and restart your terminal for it to be found
After playing with Gigalixir recently, I was surprised to find that some other applications that I develop no longer work on my laptop. I lost a few hours tracking down the cause. It boils down to an entry that Gigalixir's tools added to my .netrc
file for localhost
. Here's the code that performs that change:
https://github.com/gigalixir/gigalixir-cli/blob/master/gigalixir/netrc.py#L37
This modification seems unsafe. It adds—or overrides in some cases—authorization for all loopback requests that honor my .netrc
file. That's a pretty sweeping change.
Hi,
I was really looking forward to push a project to Gigalixir, however I encountered the following error while running gigalixir login
:
Traceback (most recent call last):
File "/home/mkaag/.local/bin/gigalixir", line 33, in <module>
sys.exit(load_entry_point('gigalixir==1.2.5', 'console_scripts', 'gigalixir')())
File "/home/mkaag/.local/lib/python3.8/site-packages/click/core.py", line 1128, in __call__
return self.main(*args, **kwargs)
File "/home/mkaag/.local/lib/python3.8/site-packages/click/core.py", line 1053, in main
rv = self.invoke(ctx)
File "/home/mkaag/.local/lib/python3.8/site-packages/click/core.py", line 1656, in invoke
super().invoke(ctx)
File "/home/mkaag/.local/lib/python3.8/site-packages/click/core.py", line 1395, in invoke
return ctx.invoke(self.callback, **ctx.params)
File "/home/mkaag/.local/lib/python3.8/site-packages/click/core.py", line 754, in invoke
return __callback(*args, **kwargs)
File "/home/mkaag/.local/lib/python3.8/site-packages/click/decorators.py", line 26, in new_func
return f(get_current_context(), *args, **kwargs)
File "/home/mkaag/.local/lib/python3.8/site-packages/gigalixir/__init__.py", line 251, in cli
raise Exception("Unknown platform: %s" % PLATFORM)
Exception: Unknown platform: freebsd
Is there a particular version of Python that I should use? Or FreeBSD is out of scope?
Here are my environment:
Thank you for the Gigalixir platform, this idea is great!
Maurice
Hey guys, it is my first time using Gigalixir but I'm stuck here with this error:
Running: gigalixir run mix ecto.create
return me this in gigalixir logs
web.1 | 03:41:05.114 [error] Postgrex.Protocol (#PID<0.283.0>) failed to connect: ** (DBConnection.ConnectionError) tcp connect (localhost:5432): connection refused - :econnrefused
I've created the Phoenix project and then followed the docs to deploy it, not sure why I am getting this error when I try to run all my migrations because I did create the database using gigalixir pg:create --free
and my prod.exs is as follow:
config :chat, ChatWeb.Endpoint,
http: [port: {:system, "PORT"}], # Possibly not needed, but doesn't hurt
url: [host: System.get_env("APP_NAME") <> ".gigalixirapp.com", port: 80],
secret_key_base: Map.fetch!(System.get_env(), "SECRET_KEY_BASE"),
server: true
config :chat, ChatWeb.Repo,
adapter: Ecto.Adapters.Postgres,
url: System.get_env("DATABASE_URL"),
ssl: true,
pool_size: 2 # Free tier db only allows 4 connections. Rolling deploys need pool_size*(n+1) connections.
Let me know if you guys need any more details
When I run gigalixir ps:remote_console
in kitty I get the warning
tput: unknown terminal "xterm-kitty"
. And the resulting console does not support navigating the input or moving through history.
For ssh this is usually resolved by using kitty +kitten ssh
Could you fix it?
https://gigalixir.readthedocs.io/en/latest/main.html#prequisites
Prequisites
should be Prerequisites
.
I want to say thank you. This service is making it easy for me to get familiar with Elixir in a low stakes environment.
According to the documentation, the gigalixir run $APP_NAME Module
command would append Elixir.
before the module automatically, which is not happening.
You can check the setup in this branch
Working command: gigalixir run course-planner Elixir.CoursePlanner.ReleaseTasks seed
Not working command: gigalixir run course-planner CoursePlanner.ReleaseTasks seed
It would be nice to be able to customize the output of the logs
command. Right now, there is a lot of duplicated data before any meaningful log is printed, which means it's not possible to view the logs nicely in any standard-width terminal window. For example:
2020-05-21T07:33:04.257862+00:00 funky-slugggy-name[funky-slugggy-name-1231231231-dgdfgg]: web.1 |
actual app log goes here
Any app using a logging framework will also include a timestamp at the start of the log statement, which means the timestamp is logged twice in that case too.
My screen fits 238 characters, and 110 of those (46%) are the prefix.
Hello,
I'm not sure where else to ask this. Every time I click "help" in the web console, it takes me to hey.com for some reason (I don't have a hey.com address) and the help link itself has no email in it.
So the problem in a nutshell is that whenever I try and git push gigalixir master
I get:
fatal: unable to access 'https://git.gigalixir.com/myappname.git/': SSL certificate problem: certificate has expired
(myappname
isn't my actual app name)
When I inspect the certificate it is a: "Kubernetes Ingress Controller Fake Certificate"
According to the guide, a certificate should be generated for me. I'm trying with a custom domain but I've also tried with a standard gigalixir subdomain.
I've tried with different version of Elixir and OTP but the latest is:
# elixir_buildpack.config
elixir_version=1.12.3
erlang_version=24.0
My prod.exs looks like this:
server: true,
http: [port: {:system, "PORT"}],
url: [host: "mydomain.com", port: 443], # Note, I have my actual domain there
secret_key_base: Map.fetch!(System.get_env(), "SECRET_KEY_BASE"),
force_ssl: [rewrite_on: [:x_forwarded_proto]],
And I have set both my APP_NAME
and SECRET_KEY_BASE
with the gigalixir cli tool.
Is it obvious what I'm doing wrong?
I'm hopefully filing this issue will work as rubber ducking otherwise I hope you can help.
Thank you!
Windows 10 64bit
python --version
yields Python 2.7.14
pip --version
yields pip 9.0.1 from c:\program files\python27\lib\site-packages (python 2.7)
gigalixir --help
yields expected output.
gigalixir version
crashes.
gigalixir login
also crashes with the same output:
> gigalixir version
Traceback (most recent call last):
File "c:\program files\python27\lib\runpy.py", line 174, in _run_module_as_main
"__main__", fname, loader, pkg_name)
File "c:\program files\python27\lib\runpy.py", line 72, in _run_code
exec code in run_globals
File "C:\Program Files\Python27\Scripts\gigalixir.exe\__main__.py", line 9, in <module>
File "c:\program files\python27\lib\site-packages\click\core.py", line 722, in __call__
return self.main(*args, **kwargs)
File "c:\program files\python27\lib\site-packages\click\core.py", line 697, in main
rv = self.invoke(ctx)
File "c:\program files\python27\lib\site-packages\click\core.py", line 1063, in invoke
Command.invoke(self, ctx)
File "c:\program files\python27\lib\site-packages\click\core.py", line 895, in invoke
return ctx.invoke(self.callback, **ctx.params)
File "c:\program files\python27\lib\site-packages\click\core.py", line 535, in invoke
return callback(*args, **kwargs)
File "c:\program files\python27\lib\site-packages\click\decorators.py", line 17, in new_func
return f(get_current_context(), *args, **kwargs)
File "c:\program files\python27\lib\site-packages\gigalixir\__init__.py", line 72, in cli
PLATFORM = call("uname -s").decode().lower() # linux or darwin
File "c:\program files\python27\lib\site-packages\gigalixir\shell.py", line 5, in call
return subprocess.check_output(cmd.split()).strip()
File "c:\program files\python27\lib\subprocess.py", line 212, in check_output
process = Popen(stdout=PIPE, *popenargs, **kwargs)
File "c:\program files\python27\lib\subprocess.py", line 390, in __init__
errread, errwrite)
File "c:\program files\python27\lib\subprocess.py", line 640, in _execute_child
startupinfo)
WindowsError: [Error 2] The system cannot find the file specified
According to pip list
, I have the following packages installed:
Package Version
---------- -------
click 6.7
gigalixir 0.23.0
pip 9.0.1
requests 2.13.0
rollbar 0.13.17
setuptools 38.2.5
six 1.11.0
stripe 1.51.0
wheel 0.30.0
Let me know if you need any further information.
Cheers!
Is it possible to create multiple databases for a single app? I am developing an app based on event driven architecture so I need two databases, one for read model and second for event store. I don't see this option in CLI. There is only gigalixir create_database my-app
which creates db for my-app and that's all. Is there a way of creating more than on db for an app?
Hi! Could you add a license to this repo? I would like to package this tool up for Arch Linux, and it's nice to have a license attached so that everyone knows they have permission to distribute it.
The MIT License is a good one if you don't have any particular preference. GitHub makes it easy to add.
Would it be possible to support https://stripe.com/docs/sources/ideal/recurring for recurring debit card payment?
I do not own a credit card, and I do not want to own a credit card. For this reason I am very limited in my use of web hosting providers for private projects. I've recently tried out gigalixir, and would love to use it for all the websites I make.
Would it be possible at all supporting something like stripe's recurring debit card payments? Or is this limited because of GCP/AWS?
I hope this is the right place to ask this question.
Using homebrew:
Traceback (most recent call last):
File "/usr/local/bin/gigalixir", line 33, in <module>
sys.exit(load_entry_point('gigalixir==1.1.10', 'console_scripts', 'gigalixir')())
File "/usr/local/bin/gigalixir", line 25, in importlib_load_entry_point
return next(matches).load()
File "/usr/local/Cellar/gigalixir/1.1.10/libexec/lib/python3.8/importlib/metadata.py", line 77, in load
module = import_module(match.group('module'))
File "/usr/local/Cellar/gigalixir/1.1.10/libexec/lib/python3.8/importlib/__init__.py", line 127, in import_module
return _bootstrap._gcd_import(name[level:], package, level)
File "<frozen importlib._bootstrap>", line 1014, in _gcd_import
File "<frozen importlib._bootstrap>", line 991, in _find_and_load
File "<frozen importlib._bootstrap>", line 975, in _find_and_load_unlocked
File "<frozen importlib._bootstrap>", line 671, in _load_unlocked
File "<frozen importlib._bootstrap_external>", line 783, in exec_module
File "<frozen importlib._bootstrap>", line 219, in _call_with_frames_removed
File "/usr/local/Cellar/gigalixir/1.1.10/libexec/lib/python3.8/site-packages/gigalixir/__init__.py", line 41, in <module>
import pkg_resources
File "/usr/local/Cellar/gigalixir/1.1.10/libexec/lib/python3.8/site-packages/pkg_resources/__init__.py", line 3239, in <module>
def _initialize_master_working_set():
File "/usr/local/Cellar/gigalixir/1.1.10/libexec/lib/python3.8/site-packages/pkg_resources/__init__.py", line 3222, in _call_aside
f(*args, **kwargs)
File "/usr/local/Cellar/gigalixir/1.1.10/libexec/lib/python3.8/site-packages/pkg_resources/__init__.py", line 3251, in _initialize_master_working_set
working_set = WorkingSet._build_master()
File "/usr/local/Cellar/gigalixir/1.1.10/libexec/lib/python3.8/site-packages/pkg_resources/__init__.py", line 558, in _build_master
ws = cls()
File "/usr/local/Cellar/gigalixir/1.1.10/libexec/lib/python3.8/site-packages/pkg_resources/__init__.py", line 551, in __init__
self.add_entry(entry)
File "/usr/local/Cellar/gigalixir/1.1.10/libexec/lib/python3.8/site-packages/pkg_resources/__init__.py", line 607, in add_entry
for dist in find_distributions(entry, True):
File "/usr/local/Cellar/gigalixir/1.1.10/libexec/lib/python3.8/site-packages/pkg_resources/__init__.py", line 2060, in find_on_path
for dist in factory(fullpath):
File "/usr/local/Cellar/gigalixir/1.1.10/libexec/lib/python3.8/site-packages/pkg_resources/__init__.py", line 2125, in distributions_from_metadata
yield Distribution.from_location(
File "/usr/local/Cellar/gigalixir/1.1.10/libexec/lib/python3.8/site-packages/pkg_resources/__init__.py", line 2585, in from_location
return cls(
File "/usr/local/Cellar/gigalixir/1.1.10/libexec/lib/python3.8/site-packages/pkg_resources/__init__.py", line 2985, in _reload_version
md_version = self._get_version()
File "/usr/local/Cellar/gigalixir/1.1.10/libexec/lib/python3.8/site-packages/pkg_resources/__init__.py", line 2767, in _get_version
version = _version_from_file(lines)
File "/usr/local/Cellar/gigalixir/1.1.10/libexec/lib/python3.8/site-packages/pkg_resources/__init__.py", line 2551, in _version_from_file
line = next(iter(version_lines), '')
File "/usr/local/Cellar/gigalixir/1.1.10/libexec/lib/python3.8/site-packages/pkg_resources/__init__.py", line 2762, in _get_metadata
for line in self.get_metadata_lines(name):
File "/usr/local/Cellar/gigalixir/1.1.10/libexec/lib/python3.8/site-packages/pkg_resources/__init__.py", line 1415, in get_metadata_lines
return yield_lines(self.get_metadata(name))
File "/usr/local/Cellar/gigalixir/1.1.10/libexec/lib/python3.8/site-packages/pkg_resources/__init__.py", line 1405, in get_metadata
value = self._get(path)
File "/usr/local/Cellar/gigalixir/1.1.10/libexec/lib/python3.8/site-packages/pkg_resources/__init__.py", line 1609, in _get
with open(path, 'rb') as stream:
PermissionError: [Errno 13] Permission denied: '/usr/local/Cellar/gigalixir/1.1.10/libexec/lib/python3.8/site-packages/idna-2.7-py3.8.egg-info/PKG-INFO'
When the password contains $ symbol the characters after it (including $ as well) till another special character is being removed, resulting in authentication failure.
Eg:-
Email: [email protected]
Password: abcdef$thispartwillberemoved*xyz
When one tries to login using:
$ gigalixir login -e [email protected] -p "abcdef$thispartwillberemoved*xyz" -y
the password that is being received in the function
def login
in user.py is
abcdef*xyz.
The issue does not exist if the email and password are entered from prompt ie if we run
$ gigalixir login
Environment Used for Testing:
Docker Image -
python:3-buster
gigalixir-cli - 1.1.8
click - 6.7
I have not investigated the issue further. This could be an issue related to click package.
Hi!
I got this error on my Arch Linux machine:
➜ ~ gigalixir signup
Traceback (most recent call last):
File "/usr/bin/gigalixir", line 11, in <module>
load_entry_point('gigalixir==0.22.0', 'console_scripts', 'gigalixir')()
File "/usr/lib/python3.6/site-packages/click/core.py", line 722, in __call__
return self.main(*args, **kwargs)
File "/usr/lib/python3.6/site-packages/click/core.py", line 697, in main
rv = self.invoke(ctx)
File "/usr/lib/python3.6/site-packages/click/core.py", line 1063, in invoke
Command.invoke(self, ctx)
File "/usr/lib/python3.6/site-packages/click/core.py", line 895, in invoke
return ctx.invoke(self.callback, **ctx.params)
File "/usr/lib/python3.6/site-packages/click/core.py", line 535, in invoke
return callback(*args, **kwargs)
File "/usr/lib/python3.6/site-packages/click/decorators.py", line 17, in new_func
return f(get_current_context(), *args, **kwargs)
File "/usr/lib/python3.6/site-packages/gigalixir/__init__.py", line 78, in cli
raise Exception("Unknown platform: %s" % PLATFORM)
Exception: Unknown platform: b'linux'
gigalixir --help
is not complaining. And
➜ ~ sudo pip install gigalixir --ignore-installed six
Collecting gigalixir
Using cached gigalixir-0.22.0.tar.gz
Collecting six
Using cached six-1.11.0-py2.py3-none-any.whl
Collecting click~=6.7 (from gigalixir)
Using cached click-6.7-py2.py3-none-any.whl
Collecting requests~=2.13.0 (from gigalixir)
Using cached requests-2.13.0-py2.py3-none-any.whl
Collecting stripe~=1.51.0 (from gigalixir)
Using cached stripe-1.51.0-py3-none-any.whl
Collecting rollbar~=0.13.11 (from gigalixir)
Using cached rollbar-0.13.17.tar.gz
Installing collected packages: click, requests, stripe, six, rollbar, gigalixir
Running setup.py install for rollbar ... done
Running setup.py install for gigalixir ... done
Successfully installed click-6.7 gigalixir-0.22.0 requests-2.18.4 rollbar-0.13.17 six-1.11.0 stripe-1.51.0
I'm not sure if this is a permissions issue? The error looks different to me though...
➜ ~ pip install gigalixir
Collecting gigalixir
Using cached gigalixir-0.14.0.tar.gz
Requirement already satisfied: click~=6.7 in /Library/Python/2.7/site-packages (from gigalixir)
Requirement already satisfied: requests~=2.13.0 in /Library/Python/2.7/site-packages (from gigalixir)
Requirement already satisfied: stripe~=1.51.0 in /Library/Python/2.7/site-packages (from gigalixir)
Collecting rollbar~=0.13.11 (from gigalixir)
Using cached rollbar-0.13.12.tar.gz
Collecting six>=1.9.0 (from rollbar~=0.13.11->gigalixir)
Using cached six-1.10.0-py2.py3-none-any.whl
Installing collected packages: six, rollbar, gigalixir
Found existing installation: six 1.4.1
DEPRECATION: Uninstalling a distutils installed project (six) has been deprecated and will be removed in a future version. This is due to the fact that uninstalling a distutils project will only partially uninstall the project.
Uninstalling six-1.4.1:
Exception:
Traceback (most recent call last):
File "/Library/Python/2.7/site-packages/pip-9.0.1-py2.7.egg/pip/basecommand.py", line 215, in main
status = self.run(options, args)
File "/Library/Python/2.7/site-packages/pip-9.0.1-py2.7.egg/pip/commands/install.py", line 342, in run
prefix=options.prefix_path,
File "/Library/Python/2.7/site-packages/pip-9.0.1-py2.7.egg/pip/req/req_set.py", line 778, in install
requirement.uninstall(auto_confirm=True)
File "/Library/Python/2.7/site-packages/pip-9.0.1-py2.7.egg/pip/req/req_install.py", line 754, in uninstall
paths_to_remove.remove(auto_confirm)
File "/Library/Python/2.7/site-packages/pip-9.0.1-py2.7.egg/pip/req/req_uninstall.py", line 115, in remove
renames(path, new_path)
File "/Library/Python/2.7/site-packages/pip-9.0.1-py2.7.egg/pip/utils/__init__.py", line 267, in renames
shutil.move(old, new)
File "/System/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/shutil.py", line 302, in move
copy2(src, real_dst)
File "/System/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/shutil.py", line 131, in copy2
copystat(src, dst)
File "/System/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/shutil.py", line 103, in copystat
os.chflags(dst, st.st_flags)
OSError: [Errno 1] Operation not permitted: '/var/folders/vm/bdkqhkqd4fngc_lw1hr6cnrc0000gn/T/pip-YdR89_-uninstall/System/Library/Frameworks/Python.framework/Versions/2.7/Extras/lib/python/six-1.4.1-py2.7.egg-info'
When I try to run gigalixir migrate $APP_NAME
this is all I get back.
Connection to us-central1.gcp.ssh.gigalixir.com closed.
▸ Invalid expression: keyword argument must be followed by space after: lists:
Command '[u'ssh', u'-t', u'[email protected]', u'-p', u'32160', u'gigalixir_run', u'run', u'eval', u'''"'"'Elixir.Ecto.Migrator'"'"':run(lists:nth(1,', u''"'"'Elixir.Application'"'"':get_env(carl,', u'ecto_repos)),', u''"'"'Elixir.Application'"'"':app_dir(carl,', u'<<"priv/repo/migrations">>),', u'up,', u'[{all,', u"true}])'"]' returned non-zero exit status 1
I use a DNS-level blocker for ads and trackers. Because of this, api.rollbar.com
does not resolve on my computer.
The issue is, whenever I trigger an error with the CLI, it dumps a huge, ugly Python stack trace. (See below).
It would be nice if the CLI would swallow errors raised from the error reporting service.
Additionally, it could be nice to make the error reporting opt-in, or at least opt-out-able.
$ gigalixir ps:remote_console -a foo
You don't have any ssh keys yet. See `gigalixir account:ssh_keys:add --help`
Exception while posting item ConnectionError(MaxRetryError("HTTPSConnectionPool(host='api.rollbar.com', port=443): Max retries exceeded with url: /api/1/item/ (Caused by NewConnectionError('<urllib3.connection.HTTPSConnection object at 0x102c75490>: Failed to establish a new connection: [Errno 61] Connection refused'))"))
Traceback (most recent call last):
File "/opt/homebrew/lib/python3.9/site-packages/urllib3/connection.py", line 174, in _new_conn
conn = connection.create_connection(
File "/opt/homebrew/lib/python3.9/site-packages/urllib3/util/connection.py", line 96, in create_connection
raise err
File "/opt/homebrew/lib/python3.9/site-packages/urllib3/util/connection.py", line 86, in create_connection
sock.connect(sa)
ConnectionRefusedError: [Errno 61] Connection refused
During handling of the above exception, another exception occurred:
Traceback (most recent call last):
File "/opt/homebrew/lib/python3.9/site-packages/urllib3/connectionpool.py", line 699, in urlopen
httplib_response = self._make_request(
File "/opt/homebrew/lib/python3.9/site-packages/urllib3/connectionpool.py", line 382, in _make_request
self._validate_conn(conn)
File "/opt/homebrew/lib/python3.9/site-packages/urllib3/connectionpool.py", line 1010, in _validate_conn
conn.connect()
File "/opt/homebrew/lib/python3.9/site-packages/urllib3/connection.py", line 358, in connect
conn = self._new_conn()
File "/opt/homebrew/lib/python3.9/site-packages/urllib3/connection.py", line 186, in _new_conn
raise NewConnectionError(
urllib3.exceptions.NewConnectionError: <urllib3.connection.HTTPSConnection object at 0x102c75490>: Failed to establish a new connection: [Errno 61] Connection refused
During handling of the above exception, another exception occurred:
Traceback (most recent call last):
File "/opt/homebrew/lib/python3.9/site-packages/requests/adapters.py", line 439, in send
resp = conn.urlopen(
File "/opt/homebrew/lib/python3.9/site-packages/urllib3/connectionpool.py", line 755, in urlopen
retries = retries.increment(
File "/opt/homebrew/lib/python3.9/site-packages/urllib3/util/retry.py", line 574, in increment
raise MaxRetryError(_pool, url, error or ResponseError(cause))
urllib3.exceptions.MaxRetryError: HTTPSConnectionPool(host='api.rollbar.com', port=443): Max retries exceeded with url: /api/1/item/ (Caused by NewConnectionError('<urllib3.connection.HTTPSConnection object at 0x102c75490>: Failed to establish a new connection: [Errno 61] Connection refused'))
During handling of the above exception, another exception occurred:
Traceback (most recent call last):
File "/opt/homebrew/lib/python3.9/site-packages/rollbar/__init__.py", line 1497, in _send_payload
_post_api('item/', payload_str, access_token=access_token)
File "/opt/homebrew/lib/python3.9/site-packages/rollbar/__init__.py", line 1545, in _post_api
resp = transport.post(url,
File "/opt/homebrew/lib/python3.9/site-packages/rollbar/lib/transport.py", line 44, in post
return _session().post(*args, proxies=proxies, **kw)
File "/opt/homebrew/lib/python3.9/site-packages/requests/sessions.py", line 590, in post
return self.request('POST', url, data=data, json=json, **kwargs)
File "/opt/homebrew/lib/python3.9/site-packages/requests/sessions.py", line 542, in request
resp = self.send(prep, **send_kwargs)
File "/opt/homebrew/lib/python3.9/site-packages/requests/sessions.py", line 655, in send
r = adapter.send(request, **kwargs)
File "/opt/homebrew/lib/python3.9/site-packages/requests/adapters.py", line 516, in send
raise ConnectionError(e, request=request)
requests.exceptions.ConnectionError: HTTPSConnectionPool(host='api.rollbar.com', port=443): Max retries exceeded with url: /api/1/item/ (Caused by NewConnectionError('<urllib3.connection.HTTPSConnection object at 0x102c75490>: Failed to establish a new connection: [Errno 61] Connection refused'))
My team uses Github action to build a auto-deployment pipeline. Part of the commands are as follows:
- name: Auto Deploy
run: |
sudo pip3 install gigalixir
gigalixir login -e "${{ secrets.GIGALIXIR_USERNAME }}" -y -p "${{ secrets.GIGALIXIR_PASSWORD }}"
gigalixir git:remote ${{ secrets.APP_NAME }}
git push -f gigalixir HEAD:refs/heads/main
- name: Migration
run: |
mkdir ~/.ssh
printf "Host *\n StrictHostKeyChecking no" > ~/.ssh/config
echo "${{ secrets.SSH_KEY }}" > ~/.ssh/id_rsa
chmod 400 ~/.ssh/id_rsa
gigalixir ps:migrate -a ${{ secrets.APP_NAME }}
It seems that Gigalixir needs some reaction time for pushing new files to the server. So there are chances that the gigalixir ps:migrate -a ${{ secrets.APP_NAME }}
command would be run before the newly added migration files being deployed on the server.
As shown in the image, this deployment contains a newly added migration file, but the server says migrations already up
Do we have any solution to this? if I operated in the wrong way, please correct me.
Thanks
Hi guys. Im getting this error when running gigalixir ps:migrate
07:37:49.130 [info] == Running ProjectName.Repo.Migrations.EnablePostgis.up/0 forward 07:37:49.130 [info] execute "CREATE EXTENSION IF NOT EXISTS postgis" ▸ Given the following expression: Ecto.Migrator.run(List.first(Application.get_env(:project_onz, :ecto_repos)), Application.app_dir(:project_onz, "priv/repo/migrations"), :up,all: true) ▸ The remote call failed with: ▸ ** (exit) %Postgrex.Error{connection_id: 25320, message: nil, postgres: %{code: :undefined_file, file: "extension.c", line: "478", message: "could not open extension controlfile \"/usr/share/postgresql/9.5/extension/postgis.control\": No such file or directory", pg_code: "58P01", routine: "parse_extension_control_file", severity: "ERROR"}} ▸ (ecto) lib/ecto/adapters/sql.ex:200: Ecto.Adapters.SQL.query!/5 ▸ (ecto) lib/ecto/adapters/postgres.ex:96: anonymous fn/4 in Ecto.Adapters.Postgres.execute_ddl/3 ▸ (elixir) lib/enum.ex:1811: Enum."-reduce/3-lists^foldl/2-0-"/3 ▸ (ecto) lib/ecto/adapters/postgres.ex:96: Ecto.Adapters.Postgres.execute_ddl/3 ▸ (ecto) lib/ecto/migration/runner.ex:104: anonymous fn/2 in Ecto.Migration.Runner.flush/0 ▸ (elixir) lib/enum.ex:1811: Enum."-reduce/3-lists^foldl/2-0-"/3 ▸ (ecto) lib/ecto/migration/runner.ex:102: Ecto.Migration.Runner.flush/0 ▸ (stdlib) timer.erl:181: :timer.tc/2
Im using geo_postgis, "~> 1.1.0
in my project
Please help
The docs are still recommending to install the CLI on Python 2 (see Prerequisites in docs/source/main.rst). Python 2 is out of support in 2 months, and still recommending it isn't a great signal.
From my usage, the client runs absolutely perfectly on Python 3. Is there any reason not to update the docs?
I noticed last week that ssh fails trying to ssh in for migrations with the following args
'['ssh', '-t', '[email protected]', '-p', '31632', 'gigalixir_run', 'migrate']'
if you instead use -tt
or possibly -T
I think you can side step this because that option will Disable pseudo-tty allocation
Any help on this would be greatly appreciated @jesseshieh
If I use the -o
options I still see gigalixir ssh_helper using the normal -t
option
gigalixir ps:ssh -o "-tt"
'['ssh', '-tt', '-t', '[email protected]', '-p', '31632', 'gigalixir_run', 'migrate']'
edit this terminal error fails during any Github Actions Deployment that requires gigalixir
Hello,
I'm running a elixir application that does not have an web server and I keep getting on the logs Readiness probe failed: dial tcp 10.56.21.195:4000: getsockopt: connection refused
.
There is a way to tell gigalixir that my app doesn't have an http server?
Thanks.
Hi Jesse,
As a (new) member of the Elixir community, I'm curious to know: is Gigalixir itself written in Elixir? Or put more broadly, what languages is Gigalixir itself written in?
I tried to answer those questions myself, but a quick search didn't yield a ready answer, and as yet there's no Wikipedia page for Gigalixir. I reckon that the above questions would be an informative addition to Gigalixir's FAQ page.
Thanks,
Ken.
Installing and caching node modules
yarn install v0.27.5
(node:646) [DEP0005] DeprecationWarning: Buffer() is deprecated due to security and usability issues. Please use the Buffer.alloc(), Buffer.allocUnsafe(), or Buffer.from() methods instead.
[1/4] Resolving packages...
[2/4] Fetching packages...
warning [email protected]: The platform "linux" is incompatible with this module.
info "[email protected]" is an optional dependency and failed compatibility check. Excluding it from installation.
[3/4] Linking dependencies...
error An unexpected error occurred: "EACCES: permission denied, open '/tmp/build/assets/node_modules/phoenix_live_view/.git/objects/pack/pack-56c0116a1ed02743a5c6dacb1a5a85c9e91ea20c.idx'".
info If you think this is a bug, please open a bug report with the information provided in "/tmp/build/assets/yarn-error.log".
The app isn't running so can't see what is in that log. I don't know if this issue is specific to LiveView or something more general.
Using two sessions of gigalixir doesn't work.
The message:
Sorry, you do not have access. Try running gigalixir login or checking your ~/.netrc file.
I'm using iTerm2 Build 3.0.12
on macOS Sierra 10.12.6
Python version: 2.7.13
Gigalixir version: 0.15.0
pip 19.0.1 from C:\Python27\lib\site-packages\pip (python 2.7)
Python 2.7.13 (v2.7.13:a06454b1afa1, Dec 17 2016, 20:42:59) [MSC v.1500 32 bit (Intel)] on win32
gigalixir login
(or gigalixir version
or gigalixir logs
or ...)
login promt should show
#Actual result
Crashes with exception Exception: Unknown platform: msys_nt-10.0
Full stack trace:
gigalixir help
Traceback (most recent call last):
File "c:\python27\lib\runpy.py", line 174, in _run_module_as_main
"__main__", fname, loader, pkg_name)
File "c:\python27\lib\runpy.py", line 72, in _run_code
exec code in run_globals
File "C:\Python27\Scripts\gigalixir.exe\__main__.py", line 9, in <module>
File "c:\python27\lib\site-packages\click\core.py", line 722, in __call__
return self.main(*args, **kwargs)
File "c:\python27\lib\site-packages\click\core.py", line 697, in main
rv = self.invoke(ctx)
File "c:\python27\lib\site-packages\click\core.py", line 1063, in invoke
Command.invoke(self, ctx)
File "c:\python27\lib\site-packages\click\core.py", line 895, in invoke
return ctx.invoke(self.callback, **ctx.params)
File "c:\python27\lib\site-packages\click\core.py", line 535, in invoke
return callback(*args, **kwargs)
File "c:\python27\lib\site-packages\click\decorators.py", line 17, in new_func
return f(get_current_context(), *args, **kwargs)
File "c:\python27\lib\site-packages\gigalixir\__init__.py", line 231, in cli
raise Exception("Unknown platform: %s" % PLATFORM)
Exception: Unknown platform: msys_nt-10.0
Looking at
gigalixir-cli/gigalixir/__init__.py
Line 223 in 3347609
It looks like we can’t open more than one ps:remote_console
to a given instance; any attempt to open another one (from the same terminal or another) gives:
Protocol 'inet_tcp': the name [email protected] seems to be in use by another Erlang node
Connection to v2018-us-central1.gcp.ssh.gigalixir.com closed.
(Using gigalixir-cli
v1.2.0)
First, awesome product! I hope to graduate out of the free tier in the next two months.
In the meantime, I just worked through my first deploy and hit a couple of snags that you may want to know about and maybe document.
One, the default .gitignore
file that Github generates for a new Elixir project includes *.secret.exs
. If someone (like me) is not paying attention, they may fail to actually commit the needed changes to prod.secret.exs
. This causes the deploy to fail with remote: ** (Code.LoadError) could not load /tmp/build/config/prod.secret.exs
.
Two, the latest version of node.js includes a buggy version of npm. I originally specified node_version=13.8.0
in my phoenix_static_buildpack.config
file. I needed to downgrade to node_version=13.3.0
to get things to work. Without the downgrade, the error was remote: npm ERR! invalid bin entry for package @babel/[email protected]. key=parser, value=bin/babel-parser.js
. This is the npm issue.
Finally, there's a minor typo in the database migrations section where you have: "If you are using not using releases..."
Thanks again for the awesome product and documentation!
Getting this during the deploy, though it seems it is still completing and the app is up. Any ideas? Update updated Elixir/Erlang versions in the buildpack for this release. Any other context that might help in particular?
# Erlang version
erlang_version=21.1
# Elixir version
elixir_version=1.7.3
remote: ** (Mix.Releases.Config.LoadError) could not load release config rel/config.exs
remote: ** (UndefinedFunctionError) function Mix.Config.Agent.start_link/0 is undefined (module Mix.Config.Agent is not available)
remote: Mix.Config.Agent.start_link()
remote: (stdlib) erl_eval.erl:680: :erl_eval.do_apply/6
remote: (stdlib) erl_eval.erl:449: :erl_eval.expr/5
remote: (stdlib) erl_eval.erl:126: :erl_eval.exprs/5
remote: (elixir) lib/code.ex:232: Code.eval_string/3
remote: (distillery) lib/mix/lib/releases/config/config.ex:281: Mix.Releases.Config.read_string!/1
remote: (distillery) lib/mix/lib/releases/config/config.ex:302: Mix.Releases.Config.read!/1
remote: Command '[u'docker', u'run', u'--rm', u'-e', u'GIGALIXIR_SHOULD_CLEAN_CACHE=True', u'-v', u'/tmp/tmp1FrasS/codecast-proto:/tmp/app', u'-v', u'/tmp/gigalixir/cache/codecast-proto/:/tmp/cache', u'-v', u'/tmp/tmp1FrasS/env:/tmp/env', u'--env=USER=www-data', u'us.gcr.io/gigalixir-152404/herokuish:latest']' returned non-zero exit status 1
FWIW, the "remote" in "remove_console" seems entirely superfluous; all other ps:
commands are also remote (and I am glad we don't have to write ps:remote_restart
, ps:remote_run
, ...
installing on macos 12.4 on m1pro fails using the brew method
https://gigalixir.readthedocs.io/en/latest/getting-started-guide.html
brew tap gigalixir/brew && brew install gigalixir
I was able to install and use it via pip
Hello! Thanks for what seems to be a great product in this (niche?) space
i love that you offer a free trial with little to no hoops to getting started
i'm having a hard time deploying a simple test app.
i'm following this tutorial here:
https://www.howtographql.com/graphql-elixir/0-introduction/
when i mix distillery.release
and then test-run things locally, it appears to work fine.
i have a feeling it's either something misconfigured in my version specifications or the way i have buildpacks configured.
would love some insight from anyone more experienced at this than i am.
here's the current state of my repo: https://github.com/jakedowns/elixir_test_app
2020-04-19T03:53:02.993171+00:00 blueviolet-humble-emperorshrimp[gigalixir-run]: Attempting health checks on port 4000
2020-04-19T03:53:03.218655+00:00 blueviolet-humble-emperorshrimp[blueviolet-humble-emperorshrimp-844cd4559d-shhbv]: web.1 | started with pid 43
2020-04-19T03:53:03.219704+00:00 blueviolet-humble-emperorshrimp[blueviolet-humble-emperorshrimp-844cd4559d-shhbv]: web.1 | sh: 1: /app/bin/app: not found
2020-04-19T03:53:03.319036+00:00 blueviolet-humble-emperorshrimp[blueviolet-humble-emperorshrimp-844cd4559d-shhbv]: web.1 | exited with code 127
2020-04-19T03:53:03.319387+00:00 blueviolet-humble-emperorshrimp[blueviolet-humble-emperorshrimp-844cd4559d-shhbv]: system | sending SIGTERM to all processes
After an initial deployment of a hobby project, I started fiddling with some of the less commonly used tooling built into Gigalixir. I was surprised to see that running gigalixir ps:remote_console
enters me into a remote shell session, without any further prompting. I'm still learning Elixir and Erlang, but this seems like a potentially dangerous thing (see https://broot.ca/erlang-remsh-is-dangerous or https://andreiclinciu.net/erlang-elixir-node-security-flaws) assuming Gigalixir doesn't run the remsh
session in a VM.
I'd expect a large red warning in the documentation as well as a Running ps:remote_console connects you to the production server, giving the remote server full RPC priviledges on this computer. This is potentially dangerous if the remote server is compromised. Are you sure you want to connect to the server? Y/n
type of command line prompt at least the first time I'm running remote_console
Thanks for building the by far easiest tool for deploying an Elixir app! 🙂
I have just started investigating gigalixir and am following along with the screencast at https://gigalixir.readthedocs.io/en/latest/main.html#screencast. I added distillery to my mix.exe file and ran mix deps.get. Then when I execute "mix release.init" I get:
evrsity-server $ mix release.init
** (Mix) The task "release.init" could not be found
Any help is appreciated.
There are some default initial migrations which Oban requires to setup a jobs table and such.
Locally I am able to run them all with no errors.
However, after deploying this to Gigalixir I get a syntax error for this query.
This might be due to the Postgresql version used on Gigalixir (possibly a version where the given syntax wasn't implemented yet)?
My local postgresql version: 12.1
Elixir version: 1.10.4
Erlang version: 23.0.1
** (Postgrex.Error) ERROR 42601 (syntax_error) syntax error at or near "NOT"
query: ALTER TABLE "public"."oban_jobs" ADD COLUMN IF NOT EXISTS "attempted_by" text[]
(ecto_sql 3.4.5) lib/ecto/adapters/sql.ex:593: Ecto.Adapters.SQL.raise_sql_call_error/1
(elixir 1.10.4) lib/enum.ex:1396: Enum."-map/2-lists^map/1-0-"/2
(ecto_sql 3.4.5) lib/ecto/adapters/sql.ex:686: Ecto.Adapters.SQL.execute_ddl/4
(ecto_sql 3.4.5) lib/ecto/migration/runner.ex:343: Ecto.Migration.Runner.log_and_execute_ddl/3
(ecto_sql 3.4.5) lib/ecto/migration/runner.ex:117: anonymous fn/6 in Ecto.Migration.Runner.flush/0
(elixir 1.10.4) lib/enum.ex:2111: Enum."-reduce/3-lists^foldl/2-0-"/3
(ecto_sql 3.4.5) lib/ecto/migration/runner.ex:116: Ecto.Migration.Runner.flush/0
(stdlib 3.13) timer.erl:166: :timer.tc/1
Creating a new project and failing when I attempt to push to remote
git push
Counting objects: 4, done.
Delta compression using up to 8 threads.
Compressing objects: 100% (4/4), done.
Writing objects: 100% (4/4), 380 bytes | 380.00 KiB/s, done.
Total 4 (delta 3), reused 0 (delta 0)
remote: Resolving deltas: 100% (3/3), completed with 3 local objects.
remote:
remote: GitHub found 4 vulnerabilities on alavkx/drip-drop's default branch (1 high, 3 moderate). To find out more, visit:
remote: https://github.com/alavkx/drip-drop/network/alerts
remote:
To https://github.com/alavkx/drip-drop.git
480152f..1cea513 master -> master
alavkx@DESKTOP-HV138MK:/mnt/c/Users/Z/Projects/drip-drop$ git push gigalixir master
Counting objects: 311, done.
Delta compression using up to 8 threads.
Compressing objects: 100% (275/275), done.
Writing objects: 100% (311/311), 140.64 KiB | 1.76 MiB/s, done.
Total 311 (delta 129), reused 0 (delta 0)
remote: Setting environment variables.
remote: * LIBCLUSTER_KUBERNETES_SELECTOR
remote: * LIBCLUSTER_KUBERNETES_NODE_BASENAME
remote: * APP_NAME
remote: * SECRET_KEY_BASE
remote: * PORT
remote: * SOURCE_VERSION
remote: Cloning into 'drip-drop'...
remote: warning: You appear to have cloned an empty repository.
remote: done.
remote: Compiling code and generating slug.
remote: latest: Pulling from gigalixir-152404/herokuish
remote: Digest: sha256:01b2c78943f694bcb5e18d7305aa444fe8205007bd93c5b6ae4648a0c63a809a
remote: Status: Image is up to date for us.gcr.io/gigalixir-152404/herokuish:latest
-----> Detecting assets directory
package.json found in assets directory
Elixir+Phoenix app detected
Detecting assets directory
package.json found in assets directory
=====> Downloading Buildpack: https://github.com/gigalixir/gigalixir-buildpack-clean-cache.git
=====> Detected Framework: Clean Cache
Not cleaning cache
=====> Downloading Buildpack: https://github.com/HashNuke/heroku-buildpack-elixir.git
=====> Detected Framework: Elixir
-----> Checking Erlang and Elixir versions
Will use the following versions:
* Stack cedar-14
* Erlang 22.0
* Elixir 1.8.2
-----> Will export the following config vars:
APP_NAME
LIBCLUSTER_KUBERNETES_NODE_BASENAME
LIBCLUSTER_KUBERNETES_SELECTOR
PORT
SECRET_KEY_BASE
SOURCE_VERSION
* MIX_ENV=prod
-----> Using cached Erlang 22.0
-----> Installing Erlang 22.0
remote:
remote: gzip: stdin: not in gzip format
remote: tar: Child returned status 1
remote: tar: Error is not recoverable: exiting now
remote: /tmp/buildpack1mxe3/lib/erlang_funcs.sh: line 37: /tmp/cache/erlang/Install: No such file or directory
-----> Using cached Elixir v1.8.2
-----> Installing Elixir v1.8.2
-----> Installing Hex
remote: /tmp/build/.platform_tools/elixir/bin/elixir: 123: exec: erl: not found
-----> Installing rebar
remote: /tmp/build/.platform_tools/elixir/bin/elixir: 123: exec: erl: not found
-----> Fetching app dependencies with mix
remote: /tmp/build/.platform_tools/elixir/bin/elixir: 123: exec: erl: not found
remote: Command '[u'docker', u'run', u'--rm', u'-e', u'GIGALIXIR_SHOULD_CLEAN_CACHE=False', u'-v', u'/tmp/tmpgkk32r/drip-drop:/tmp/app', u'-v', u'/tmp/gigalixir/cache/drip-drop/:/tmp/cache', u'-v', u'/tmp/tmpgkk32r/env:/tmp/env', u'--env=USER=www-data', u'us.gcr.io/gigalixir-152404/herokuish:latest']' returned non-zero exit status 1
To https://git.gigalixir.com/drip-drop.git/
! [remote rejected] master -> master (pre-receive hook declined)
error: failed to push some refs to 'https://git.gigalixir.com/drip-drop.git/'
There's no documentation about running seeds.
The only one that seems possible is the run
command, but it only specifies module
and function
as arguments, but not arguments
to be passed to functions.
Is it intentional? How can I run my app's seeds?
I've created a new Phoenix umberlla project and deployed it to Gigalixir at https://unhealthy-frugal-alligatorgar.gigalixirapp.com/. I have created a PostgreSql database on Google cloud storage with the recommend network mask and updated the DATABASE_URL environment variable but I'm unable to connect.
I get the error
2018-12-14T22:10:21.414930+00:00 unhealthy-frugal-alligatorgar[unhealthy-frugal-alligatorgar-544687c55c-2jscq]: web.1 | 22:10:21.414 [error] Postgrex.Protocol (#PID<0.285.0>) failed to connect: ** (Postgrex.Error) FATAL 28000 (invalid_authorization_specification): connection requires a valid client certificate
I believe that the solution is to upload my client certificates like this article suggests https://www.amberbit.com/blog/2017/11/13/connecting-ecto-to-postgresql-with-ssl/ but I don't want to check them into version control.
How can I get these certificates to the server? Or perhaps there's another way to connect to GCP storage.
I am getting this error: remote: warning: You appear to have cloned an empty repository.
Detected buildpacks: multi elixir
-----> Multipack app detected
=====> Downloading Buildpack: https://github.com/gigalixir/gigalixir-buildpack-clean-cache.git
=====> Detected Framework: Clean Cache
Not cleaning cache
=====> Downloading Buildpack: https://github.com/HashNuke/heroku-buildpack-elixir
=====> Detected Framework: Elixir
-----> Checking Erlang and Elixir versions
WARNING: elixir_buildpack.config wasn't found in the app
Using default config from Elixir buildpack
Will use the following versions:
* Stack cedar-14
* Erlang 20.1
* Elixir 1.5.3
-----> Will export the following config vars:
APP_NAME
LIBCLUSTER_KUBERNETES_NODE_BASENAME
LIBCLUSTER_KUBERNETES_SELECTOR
PORT
SECRET_KEY_BASE
SOURCE_VERSION
* MIX_ENV=prod
-----> Using cached Erlang 20.1
-----> Installing Erlang 20.1
-----> Using cached Elixir v1.5.3
-----> Installing Elixir v1.5.3
At the bottom of the log it says:
remote: ** (Mix) You're trying to run :autocomplete on Elixir v1.5.3 but it has declared in its mix.exs file it supports only Elixir ~> 1.7
I can't figure out why this is because I have an elixir_buildpack.config
file as seen below:
Any help would be appreciated.
Line 11 in 4f2bd00
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.