Хобрук: Ваш путь к мастерству в программировании

Rails всякий раз, когда не работает с rvm

Я следил за этой проблемой https://github.com/javan/whenever/issues/714 и установите мой schedule.rb вот так.

env :PATH, ENV['PATH']
set :output, {:error => '~/Desktop/z.error.log', :standard => '~/Desktop/z.standard.log'}

every 1.minute do
  runner 'Price.create'
end

Затем я проверяю свой crontab -l, он показал следующую команду

PATH=/Users/MyUserName/.rvm/gems/ruby-2.3.3@rails514/bin:/Users/MyUserName/.rvm/gems/ruby-2.3.3@global/bin:/Users/MyUserName/.rvm/rubies/ruby-2.3.3/bin:/Users/MyUserName/.rvm/bin:/usr/local/opt/[email protected]/bin:/usr/local/bin:/usr/bin:/bin:/usr/sbin:/sbin:/Library/TeX/texbin

* * * * * /bin/bash -l -c 'cd /Users/MyUserName/Desktop/my-project && bundle exec bin/rails runner -e production '\''Price.create'\'' >> ~/Desktop/z.standard.log 2>> ~/Desktop/z.error.log'

# End Whenever generated tasks for: /Users/MyUserName/Desktop/my-project/config/schedule.rb at: 2018-01-30 02:13:32 +0800

Это кажется отличным и исполняемым, однако я проверил журнал ошибок и нашел следующие ошибки.

упаковщик: не удалось загрузить команду: bin/rails (bin/rails)

Bundler::GemNotFound: Could not find erubi-1.7.0 in any of the sources
  /Users/MyUserName/.rvm/gems/ruby-2.3.3@rails4271/gems/bundler-1.16.1/lib/bundler/spec_set.rb:88:in `block in materialize'
  /Users/MyUserName/.rvm/gems/ruby-2.3.3@rails4271/gems/bundler-1.16.1/lib/bundler/spec_set.rb:82:in `map!'
  /Users/MyUserName/.rvm/gems/ruby-2.3.3@rails4271/gems/bundler-1.16.1/lib/bundler/spec_set.rb:82:in `materialize'
  /Users/MyUserName/.rvm/gems/ruby-2.3.3@rails4271/gems/bundler-1.16.1/lib/bundler/definition.rb:170:in `specs'
  /Users/MyUserName/.rvm/gems/ruby-2.3.3@rails4271/gems/bundler-1.16.1/lib/bundler/definition.rb:237:in `specs_for'
  /Users/MyUserName/.rvm/gems/ruby-2.3.3@rails4271/gems/bundler-1.16.1/lib/bundler/definition.rb:226:in `requested_specs'
  /Users/MyUserName/.rvm/gems/ruby-2.3.3@rails4271/gems/bundler-1.16.1/lib/bundler/runtime.rb:108:in `block in definition_method'
  /Users/MyUserName/.rvm/gems/ruby-2.3.3@rails4271/gems/bundler-1.16.1/lib/bundler/runtime.rb:20:in `setup'
  /Users/MyUserName/.rvm/gems/ruby-2.3.3@rails4271/gems/bundler-1.16.1/lib/bundler.rb:107:in `setup'
  /Users/MyUserName/.rvm/gems/ruby-2.3.3@rails4271/gems/bundler-1.16.1/lib/bundler/setup.rb:20:in `<top (required)>'
  /Users/MyUserName/.rvm/rubies/ruby-2.3.3/lib/ruby/site_ruby/2.3.0/rubygems/core_ext/kernel_require.rb:55:in `require'
  /Users/MyUserName/.rvm/rubies/ruby-2.3.3/lib/ruby/site_ruby/2.3.0/rubygems/core_ext/kernel_require.rb:55:in `require'

Я чувствовал себя немного смущенным и задавался вопросом, почему я не могу загрузить правильный путь к драгоценному камню.

Окружающая среда:

ОС X: 10.13.2

Рельсы 5.1.4

Руби 2.3.3

Обновлять

Я узнал, что в сообщении об ошибке из журнала указано, что

/Users/MyUserName/.rvm/gems/ruby-2.3.3@rails4271/gems/bundler-1.16.1/lib/bundler/spec_set.rb:88:in `block in materialize'`,

Тем не менее, я проверяю свой crontab -l, он четко показал эту настройку

#sm start rvm
PATH="/Users/MyUserName/.rvm/gems/ruby-2.3.3@rails514/bin:/Users/MyUserName/.rvm/gems/ruby-2.3.3@global/bin:/Users/MyUserName/.rvm/rubies/ruby-2.3.3/bin:/Users/MyUserName/.rvm/gems/ruby-2.3.3@rails514/bin:/Users/MyUserName/.rvm/gems/ruby-2.3.3@global/bin:/Users/MyUserName/.rvm/rubies/ruby-2.3.3/bin:/Users/MyUserName/.rvm/bin:/usr/local/opt/[email protected]/bin:/usr/local/bin:/usr/bin:/bin:/usr/sbin:/sbin:/Library/TeX/texbin"
GEM_HOME='/Users/MyUserName/.rvm/gems/ruby-2.3.3@rails514'
GEM_PATH='/Users/MyUserName/.rvm/gems/ruby-2.3.3@rails514:/Users/MyUserName/.rvm/gems/ruby-2.3.3@global'
MY_RUBY_HOME='/Users/MyUserName/.rvm/rubies/ruby-2.3.3'
IRBRC='/Users/MyUserName/.rvm/rubies/ruby-2.3.3/.irbrc'
RUBY_VERSION='ruby-2.3.3'
#sm end rvm

Я смущен, почему он все еще получает неправильную версию rvm. Я что-то пропустил?

Обновление 2

После того, как я изменил значение по умолчанию gemset, оно работает отлично.

Я использовал эту команду

rvm use 2.3.3@rails514 --default

Но кто-нибудь может сказать мне, как указать правильный путь в crontab вместо установки rvm по умолчанию?


  • Что произойдет, если вы наберете cd /Users/MyUserName/Desktop/my-project && bundle exec bin/rails runner -e production '\''Price.create'\'' , то, что работает CRONTAB, в командной строке? Возможно, это поможет устранить неполадки. 29.01.2018
  • Это работает отлично. 30.01.2018
  • Я обнаружил, что в сообщении об ошибке указано, что /Users/MyUserName/.rvm/gems/ruby-2.3.3@rails4271/gems/bundler-1.16.1/lib/bundler/spec_set.rb:88:in block находится в материализации, и обновил свой вопрос! 30.01.2018
  • Таким образом, команда работает из командной строки, но не через crontab, поэтому вам нужно выполнить некоторые действия по устранению неполадок rvm/crontab. Возможно, rvm.io/deployment/cron или stackoverflow.com/questions/20954298/ Будет чем помочь. 30.01.2018

Ответы:


1

Попробуйте запустить

rvm cron setup

Не уверен, что это решит проблему, но однажды у меня была похожая проблема, и она сработала для меня. Удачи!

29.01.2018
  • Это помогает мне добавить что-то вроде PATH, GEM_HOME, GEM_PATH в crontab, но ничего не меняет. Я все еще получаю то же сообщение об ошибках. 29.01.2018
  • Новые материалы

    Аргументы прогрессивного улучшения почти всегда упускают суть
    В наши дни в кругах веб-разработчиков много болтают о Progressive Enhancement — PE, но на самом деле почти все аргументы с обеих сторон упускают самую фундаментальную причину, по которой PE..

    Введение в Джанго Фреймворк
    Схема «работать умно, а не усердно» В этой и последующих статьях я познакомлю вас с тем, что такое фреймворк Django и как создать свое первое приложение с помощью простых и понятных шагов, а..

    Настольный ПК как «одно кольцо, чтобы править всеми» домашних компьютеров
    Вид после 9 месяцев использования С настольных компьютеров все началось, но в какой-то момент они стали «серверами», и мы все перешли на ноутбуки. В прошлом году я столкнулся с идеей настольных..

    Расширенные методы безопасности для VueJS: реализация аутентификации без пароля
    Руководство, которое поможет вам создавать безопасные приложения в долгосрочной перспективе Безопасность приложений часто упускается из виду в процессе разработки, потому что основная..

    стройный-i18следующий
    Представляем стройную оболочку для i18next. Эта библиотека, основанная на i18next, заключает экземпляр i18next в хранилище svelte и отслеживает события i18next, такие как languageChanged,..

    Обзор 20 основных и современных методов работы с массивами в JavaScript
    Вы знаете их всех? В этом коротком посте я покажу сводку методов, доступных в JavaScript для работы с массивами. Я надеюсь, что вы найдете это полезным! В конце поста вы найдете ссылку на..

    Да, но я чувствую необходимость указать, что это или не единственные два.
    Да, но я чувствую необходимость указать, что это или не единственные два. Обучение с подкреплением (в качестве примера) также является важным.