Это происходит, вероятно, из-за обновления версии ruby. Попробуйте установить драгоценные камни снова с помощью bundle install
, а затем повторите попытку. Если вы не работаете, вам нужно будет запустить bundle exec rails db:migrate
для связки, выбрать правильную версию драгоценных камней.
РЕДАКТИРОВАТЬ: , так как вы используете rvm, убедитесь, что вы используете те же версии Ruby. Взгляните на этот https://rvm.io/workflow/projects и убедитесь, что вы в правильной версии. Подсказка: проверьте версию Ruby в Gemfile, так как это может быть источником вашей проблемы.
Простой ответ должен поместить Ваш повторно используемый код в Ваш каталог пакетов сайта, который находится в Вашем sys.path.
Можно также расширить путь поиска путем добавления .pth файлов где-нибудь в пути. См. https://docs.python.org/2/install/#modifying-python-s-search-path для получения дополнительной информации
О, и Python 2.6/3.0 добавляет поддержку PEP370, Каталога пакетов сайта В расчете на пользователя
Если Ваши допускающие повторное использование файлы упаковываются (то есть, они включают __init__.py
файл), и путь к тому пакету является частью Вашего PYTHONPATH или sys.path затем, необходимо смочь сделать просто
import Foo
Этот вопрос предоставляет еще несколько подробной информации.
(Примечание: Как Jim сказал, Вы могли также отбросить свой повторно используемый код в Ваш site-packages
каталог.)
Можно вставить допускающий повторное использование материал site-packages
. Это абсолютно прозрачно, так как это находится в sys.path
по умолчанию.
Можно поместить someName.pth
файлы в site-packages
. Эти файлы имеют каталог, в котором живет Ваш фактический допускающий повторное использование материал. Это также абсолютно прозрачно. И не включает дополнительный шаг установки изменения в site-packages
.
Можно поставить каталог допускающего повторное использование материала PYTHONPATH
. Это немного менее прозрачно, потому что необходимо удостовериться, что это установлено. Не аэрокосмические исследования, но не абсолютно прозрачный.
Самый простой путь состоит в том, чтобы установить (или добавить к), PYTHONPATH, и поместите (или символьная ссылка) свои модули и пакеты в путь, содержавшийся в PYTHONPATH.
В одном проекте я хотел удостовериться, что пользователь мог поместить сценарии Python (который мог в основном использоваться в качестве плагинов), где угодно. Мое решение состояло в том, чтобы поместить следующее в файл конфигурации для того проекта:
[server]
PYPATH_APPEND: /home/jason:/usr/share/some_directory
Тем путем это добавило бы/home/jason и/usr/share/some_directory к пути Python в запуске программы.
Затем это - просто простой вопрос разделения строки двоеточиями и добавлением тех каталогов в конец sys.path. Можно хотеть рассмотреть помещение модуля в каталоге пакетов сайта, который содержит функцию, чтобы читать в том файле конфигурации и добавить те каталоги к sys.path (к сожалению, у меня нет времени в данный момент для записи примера).
Как другие упомянули, это - хорошая идея поместить как можно больше в пакеты сайта и также использующий .pth файлы. Но это может быть хорошей идеей, если у Вас есть сценарий, который должен импортировать набор материала, это не находится в пакетах сайта, которые Вы не хотели бы импортировать из других сценариев.
(может также быть способ сделать это использование .pth файлы, но мне нравится способность управлять путем Python в том же месте, как я поместил остальную часть моей информации о конфигурации),
Мое решение состояло в том, чтобы упаковать одну утилиту, которая импортирует модуль: my_util находится в пакетах сайта
import my_util
foo = myutil.import_script('..//shared1//reusable_foo')
if foo == None:
sys.exit(1)
def import_script(script_path, log_status = True):
"""
imports a module and returns the handle
"""
lpath = os.path.split(script_path)
if lpath[1] == '':
log('Error in script "%s" in import_script' % (script_path))
return None
#check if path is already in sys.path so we don't repeat
npath = None
if lpath[0] == '':
npath = '.'
else:
if lpath[0] not in sys.path:
npath = lpath[0]
if npath != None:
try:
sys.path.append(npath)
except:
if log_status == True:
log('Error adding path "%s" in import_script' % npath)
return None
try:
mod = __import__(lpath[1])
except:
error_trace,error_reason = FormatExceptionInfo()
if log_status == True:
log('Error importing "%s" module in import_script: %s' % (script_path, error_trace + error_reason))
sys.path.remove(npath)
return None
return mod