2011-12-05 11 views
5

Tôi đang cố gắng chạy lệnh django tùy chỉnh làm tác vụ theo lịch trên Heroku. Tôi có thể thực hiện lệnh tùy chỉnh cục bộ qua: python manage.py send_daily_email. (Lưu ý: Tôi không có bất kỳ vấn đề với lệnh quản lý tùy chỉnh riêng của mình)Chạy lệnh Django custom manage.py trên Heroku - Nhập vấn đề

Tuy nhiên, Heroku là đem lại cho tôi những ngoại lệ sau khi cố gắng "Run" nhiệm vụ thông qua Heroku Scheduler addon:

Traceback (most recent call last): 
    File "bin/send_daily_visit_email.py", line 2, in <module> 
    from django.conf import settings 
ImportError: No module named django.conf 

tôi đặt một kịch bản python trong /bin/send_daily_email.py, và nó là như sau:

#! /usr/bin/python 
from django.conf import settings 
settings.configure() 
from django.core import management 

management.call_command('send_daily_email') #delegates off to custom command 

trong Heroku, tuy nhiên, tôi có thể chạy heroku run bin/python - khởi động vỏ python - và thành công hoàn toàn nhập khẩu từ settingsdjango.conf

Tôi khá chắc chắn nó có cái gì để làm với PYTHON_PATH hoặc tầm nhìn của tôi để Django SETTINGS_MODULE, nhưng tôi không chắc chắn làm thế nào để giải quyết vấn đề. ai đó có thể chỉ cho tôi đi đúng hướng? Có cách nào dễ dàng hơn để hoàn thành những gì tôi đang cố gắng làm ở đây không?

Cảm ơn bạn rất nhiều vì lời khuyên và lời khuyên của bạn trước! Mới với Heroku! :)

EDIT:

bình mỗi Nix, tôi thực hiện một số điều chỉnh, và đã khám phá ra rằng việc xác định con đường python chính xác của tôi, tôi đã vượt qua việc cài đặt Django.

bây giờ tôi nhận được:

File "/app/lib/python2.7/site-packages/django/core/management/__init__.py", line 155, in call_command 
    raise CommandError("Unknown command: %r" % name) 
django.core.management.base.CommandError: Unknown command: 'send_daily_email' 

Mặc dù, tôi có thể thấy 'send_daily_email' khi tôi chạy '' Heroku chạy bin/app python/manage.py```.

Tôi sẽ cập nhật nếu tôi gặp câu trả lời.

Trả lời

3

Có thể bạn đang sử dụng một trình thông dịch khác.

Kiểm tra để đảm bảo trình bao python giống với python bạn tham chiếu trong tập lệnh/usr/bin/python của bạn. Nó có thể là có một khác nhau trong con đường của bạn, mà sẽ giải thích lý do tại sao nó hoạt động khi bạn chạy python manage.py nhưng không phải của bạn vỏ scrip mà bạn tham khảo một cách rõ ràng /usr/bin/python.


Nhập which python sẽ cho bạn biết thông dịch viên nào được tìm thấy trên đường dẫn của bạn.

+0

Wow. Bạn đúng. Khi tôi gọi '' 'heroku chạy bin/python bin/send_daily_email.py''' (so với' '' heroku chạy bin/send_daily_email.py).Tôi sẽ sửa lại câu trả lời của mình và đưa ra phản hồi hiện tại của tôi để xem bạn có thể giúp được không :) Nhưng tôi sẽ nói với SO bạn đã trả lời câu hỏi. – kturner

2

Ngoài ra, điều này cũng có thể được giải quyết bằng cách thêm thư mục chính vào đường dẫn Python của bạn. Một cách nhanh chóng và không phô trương để thực hiện điều đó là thêm nó vào biến môi trường PYTHONPATH (thường là/ứng dụng trên ngăn xếp Heroku Cedar).

Thêm nó thông qua lệnh Heroku config:

$ heroku config:add PYTHONPATH=/app 

Điều đó sẽ làm điều đó! Để biết thêm chi tiết: http://tomatohater.com/2012/01/17/custom-django-management-commands-on-heroku/