Static error when giving the command "python manage.py collectstatic" - django

When I give the command "python manage.py collectstatic" it gives the following problem
"0 static files copied to '/home/leonard368a/leonard368a.pythonanywhere.com/static', 119 unmodified."
does anyone have any way to solve this?
line of command:
STATIC_URL = '/static/'
STATICFILES_DIRS = [
os.path.join(BASE_DIR, 'static')
]
STATIC_ROOT = "/static/"

Collectstatic command use, when you want to deploy your project on server, command copy all static file on local to server this is main use of this command and it's also be use in local but main perpose is copy all file and put on server file manager,
In your case you use the
STATICFILEES_DIRS and STATIC_ROOT are same so in local file system copy static dir to static that why you need to change STATIC_ROOT='asset' or STATIC_ROOT = os.path.join(BASE_DIR, 'asset') in your root dir
static file configration in python any where
collect static in python any where
If it work let me know

Related

Found another file with the destination path 'admin'

I am trying to deploy the app on Heroku but when I run the following command: "python manage.py collectstatic" it returns multiple "Found another file with the destination path 'admin...".
When I "git push heroku" the app, I can see the same error.
Next, the application works, but /admin page doesn't have any format, like it is not reading css, font, etc. I've checked staticfiles/admin and it has its css,font,img and js folder with files.
I've tried all the advices given here, but I'm not finding a solution. Here my settings (see my comments at the end of the code):
import os
import django_heroku
# Build paths inside the project like this: os.path.join(BASE_DIR, ...)
BASE_DIR = os.path.dirname(os.path.dirname(os.path.abspath(__file__)))
.
.
.
# Static files (CSS, JavaScript, Images)
# https://docs.djangoproject.com/en/3.0/howto/static-files/
STATIC_ROOT = os.path.join(BASE_DIR, 'staticfiles') #Heroku
#STATIC_ROOT = os.path.join(BASE_DIR, 'static') #ok for IBM Cloud
STATIC_URL = '/static/'
MEDIA_ROOT = os.path.join(STATIC_ROOT, 'media') # if I comment this line and
MEDIA_URL = '/media/' # this line, /admin page has correct css but I don't have images in the application
# Extra places for collectstatic to find static files.(extra heroku)
STATICFILES_DIRS = (
os.path.join(BASE_DIR, 'static'),
)
# Next line makes application not work, it shows database errors
django_heroku.settings(locals())
"""
so, I added "release: python manage.py migrate" to procfile, now the app works,
/admin shows format ok, but database seems to be empty, no information is displayed on
site pages, and admin users don't exist anymore (my database is sqlite3).
"""
And what I get when "git push heroku master" is:
remote: Found another file with the destination path 'admin/img/selector-icons.svg'. It will be ignored since only the first encountered file is collected. If this is not what you want, make sure every static file has a unique path.
remote: Found another file with the destination path 'admin/img/calendar-icons.svg'. It will be ignored since only the first encountered file is collected. If this is not what you want, make sure every static file has a unique path.
.
.
.
Please help

Django not updating static css file design in browser when I run collect static command

I wrote css file and then save it all changes happen and when I run collect static command and then I again change css files no changes displayed on browser nothing happen at all.
It may be due to cache problem. So, you can try this on your browser which will reload from start:
Ctrl + R
I would suggest to double check the settings.py if the STATICFILES_DIRS and STATIC_URL is declared there. An example below-
STATIC_URL = '/static/'
STATICFILES_DIRS = [
'static',
]
MEDIA_URL = '/media/'
MEDIA_ROOT = 'media'
Then create a static folder and media folder where manage.py file is located. Then run the python3 manage.py collectstatic. Hope it works.
It is due to catch problem.
ctrl +f5
Is the solution

Why python manage.py collectstatic do not copy files to correct location?

The problem I am facing is that my Django project can't find static files.
I was struggling with this issue for quite a while hence,
now I figured where the problem is however, I have no idea how to fix it.
Real static files location:
ls /code/jk/static/jk/css/main.css
ls /code/jk/static/jk/js/main.js
When running: RUN (python /code/jk/manage.py collectstatic --noinput)
I noticed that this provides me a wrong location:
...
61 static files copied to '/code/jk/jk/static', 2 unmodified.
...
There is redundant '/code/jk/jk/static' in the path and I have no idea how to change it.
settings.py
...
STATIC_DIR = os.path.join(BASE_DIR, 'static')
STATIC_URL = '/static/'
STATICFILES_DIRS = [STATIC_DIR]
PROJECT_ROOT = os.path.dirname(os.path.abspath(__file__))
STATIC_ROOT = os.path.join(PROJECT_ROOT, 'static')
MEDIA_DIR = os.path.join(BASE_DIR, 'media')
MEDIA_URL = '/media/'
MEDIA_ROOT = MEDIA_DIR
...
I am using Django application in docker as following:
Dockerfile
FROM python:3
ENV PYTHONUNBUFFERED 1
RUN mkdir /code
WORKDIR /code
COPY . /code/
RUN (pip install -r reqirements.txt)
RUN (python /code/jk/manage.py migrate)
RUN (python /code/jk/manage.py collectstatic --noinput)
RUN (python /code/jk/manage.py migrate)
# clean packages
RUN apt-get clean
RUN rm -rf /var/cache/apt/archives/* /var/lib/apt/lists/*
ENTRYPOINT ["/code/jk/start_gunicorn.sh"]
start_gunicorn.sh
#!/bin/bash
cd /code/jk/
touch ./gunicorn.log
touch ./gunicorn-access.log
tail -n 0 -f ./gunicorn*.log &
#export DJANGO_SETTINGS_MODULE=projectx.settings
exec gunicorn jk.wsgi \
--bind 0.0.0.0:8000 \
--workers 3 \
--log-level=info \
--log-file=./gunicorn.log \
--access-logfile=./gunicorn-access.log \
"$#"
1 - The directory collectstatic collects assets in and directories you store your assets sources in aren't the same.
There are two kinds of directory you must know about with django.
The directories to store your static files sources, from the applications. Usually those are static subdirectories in your applications but you can add your own by setting the STATICFILES_DIRS settings variable.
The directory your static files will be collected into for production and serving. This is defined by STATIC_ROOT and is not the same as the other directories I talked about. In my personnal case, I usually use /path/to/project/staticfiles so I can still use /path/to/project/static to store sources.
Here you seem to mistake both. If I'm not wrong, your /code/jk/static is the directory you expect to get your assets collected into. Yet, you also put some of your sources in it. You shouldn't add assets by hand in this directory, which is collectstatic's job to retrieve them from your sources locations.
[EDIT]: You also should not use a directory as both your STATIC_ROOT location and a location to store your assets sources.
2 - Collectstatic doesn't move your assets to the wrong location, actually it acts exactly as how you defined it.
Assuming that you expect your assets to be collected into /code/jk/static, you should define STATIC_ROOT like this :
# Note: BASE_DIR value should be `/code/jk`
STATIC_ROOT = os.path.join(BASE_DIR, 'static')
And not like this :
PROJECT_ROOT = os.path.dirname(os.path.abspath(__file__))
STATIC_ROOT = os.path.join(PROJECT_ROOT, 'static')
The later defines PROJECT_ROOT as "The directory containing the current __file__ which should be settings.py". Your settings.py should be contained in /code/jk/jk which is therefore your PROJECT_ROOT value.
So when you define your STATIC_ROOT like a static subdirectory of your PROJECT_ROOT it's perfectly normal to get your assets stored in /code/jk/jk/static.

Collectstatic is copying too many files on my openshift instance

I would like to use the collectstatic option in my openshift django instance but it appears to be copying loads of unneeded files.
An example line of output
Pretending to copy '/var/lib/openshift/519017e25973ca1ead00035b/app-root/runtime/dependencies/python/virtenv/lib64/python2.7/site-packages/Django-1.5.2-py2.7.egg/django/contrib/contenttypes/locale/da/LC_MESSAGES/django.po'
Here are some snippets from settings.py
if 'OPENSHIFT_HOMEDIR' in os.environ:
# Python dotted path to the WSGI application used by Django's runserver.
WSGI_APPLICATION = 'wsgi.application'
DEBUG = False
DB_ROOT = os.environ['OPENSHIFT_DATA_DIR']
STATICFILE_DIR = os.path.join(os.environ['OPENSHIFT_REPO_DIR'], 'wsgi', 'static', 'mysite')
TEMPLATE_DIR = os.path.join(os.environ['OPENSHIFT_REPO_DIR'], 'wsgi', 'templates')
STATIC_ROOT = os.path.join(os.environ['OPENSHIFT_REPO_DIR'], 'wsgi', 'static')
STATICFILES_DIRS = (STATICFILE_DIR,)
"ls -R $OPENSHIFT_REPO_DIR/ | grep virtualenv" yields no results
ls -R $OPENSHIFT_REPO_DIR../.. | grep virtenv does show a bunch of old virtenvs
Also, this seems strange:
> ls -la $OPENSHIFT_HOMEDIR
drwxr-xr-x. 11 xxxx xxxx 4096 Jan 26 11:45 python
lrwxrwxrwx. 1 root root 50 Jun 7 2013 python-2.7 -> /var/lib/openshift/519017e25973ca1ead00035b/python
It looks like the virtualenv is somehow being included (perhaps via a symlink) in the STATICFILE_DIRS setting. If you do ls -R on STATIC_ROOT do you see anything that should be there?
For others who may experience the same issue.
This was caused by the version of settings.py on openshift being out of sync with my local copy. I had set the STATICFILE_DIR incorrectly and checked it in at some point.
In Django the STATIC_ROOT is the location where the static files get copied to when you run collectstatic. STATICFILES_DIRS is where collectstatic looks for static files to collect. In your case you have STATIC_ROOT set to $OPENSHIFT_REPO_DIR/wsgi/static and STATICFILES_DIRS set to STATICFILE_DIR which is set to $OPENSHHIFT_REPO_DIR/wsgi/static.
So you are copying files from wsgi/static and placing them in wsgi/static. This seems that it might be causing a type of circular situation where it will copy the same files over and over again.
Make sure that STATIC_ROOT is not included in STATICFILES_DIRS.

Why won't collectstatic copy my static files?

I have a MyApp/static/MyApp directory.
When I run ./manage.py collectstatic, I expect the MyApp directory be copied to STATIC_ROOT, but it doesn't.
I have DownloadedApp/static/DownloadedApp as well and its copied to STATIC_ROOT fine.
What am I missing?
What are the STATIC_ROOT, STATICFILES_FINDERS, and STATICFILES_DIRS in your settings.py?
When collectstatic is run, the default STATICFILES_FINDERS value django.contrib.staticfiles.finders.FileSystemFinder will collect your static files from any paths that you have in STATICFILES_DIRS.
The other default STATICFILES_FINDERS value django.contrib.staticfiles.finders.AppDirectoriesFinder will look in the /static/ folder of any apps in your INSTALLED_APPS.
All of the static files that are found will be placed in the specified STATIC_ROOT directory.
Check out this link to the collectstatic docs
And this link an explanation of the various static settings in settings.py
You can also use python manage.py findstatic to see which directories collectstatic will look in.
just do this and make the naming convention same
STATIC_URL = '/static/'
STATICFILES_DIRS = [
os.path.join(BASE_DIR, 'static')
]
STATIC_ROOT = os.path.join(BASE_DIR, 'assets')
static directory contains all off your project assets
assets directory will create automatic when u run this cmd
python3 manage.py collectstatic
this will copy all static folder content into assets folder
hope this helps :)
That just happened to me and I accidentally put the app's static files directory in the .gitignore file. So on my local machine it got collected just fine, but in production the static files were actually missing (gitignored).
your are missing the STATIC_ROOT where your static files going to be copied just
add this line in your settings.py
STATIC_ROOT=os.path.join(BASE_DIR,'staticfiles')
your settings.py looks like this :
STATIC_URL = '/static/'
STATIC_ROOT=os.path.join(BASE_DIR,'staticfiles')
#added manully
STATICFILES_DIRS = [
os.path.join(BASE_DIR, "static")
]
remember to add STAIC_ROOT path in urls.py
from django.contrib import admin
from django.urls import path, include
from django.conf import settings
from django.conf.urls.static import static
urlpatterns = [
path('admin/', admin.site.urls),
path("" ,include("home.urls")),
]+static(settings.STATIC_URL, document_root=settings.STATIC_ROOT)
After all of it you can run :
python manage.py collectstatic
it will create a staticfiles folder for you in your Dir
This happened to me because while investigating a bug occurring on certain dates, changed my computer date and time.
Hence it disturbed things like collectstatic, and also my browser history.
Don't change your computer date and time.
I was under the impression the comparison would be content based. It turned out to be date based. So, don't mess with your files after collecstatic.
One Quick work-around, although this does not fix it or explain WHY it's happening, is to:
go to your project's file directory & rename your project's
'static' folder to something else like 'static-old'
create a new,empty folder called 'static' in your project directory
now if you run python manage.py collectstatic it will see that nothing is
in your static folder and will copy ALL static files over.
if you have setup everything properly for static and you are using nginx then enter this command
sudo nginx -t
You will see error why your static files aren't being served and fix that specific error
In my case I gave wrong path in my nginx config
location /static {
root /home/ubuntu/myproject/app/static/;
}