Rails 4 не обнаруживает приложение

После обновления до Rails 4 я пытаюсь запустить сервер, но он не запускается. Проще говоря, кажется, что приложение не «обнаружено», как будто там нет никакого приложения.

~ $ bundle exec rails server
Usage:
  rails new APP_PATH [options]

Options:
  -r, [--ruby=PATH]              # Path to the Ruby binary of your choice
                                 # Default: /app/vendor/ruby-2.0.0/bin/ruby
  -b, [--builder=BUILDER]        # Path to some application builder (...
  -m, [--template=TEMPLATE]      # Path to some application template (...
      [--skip-gemfile]           # Don't create a Gemfile
  -B, [--skip-bundle]            # Don't run bundle install

Что странно, так это то, что (более старый) системный гем заставит его нормально запускаться, но не с Bundler.

Почему не запускается Rails?

Я пытался перемещаться по исходному коду CLI, но не могу понять, что происходит.

(Используя Edge Rails 4.0.0.beta и Ruby 2.0.0.rc)

Если вам интересно, вот список каталогов:

~ $ ls
app  config db    Gemfile   lib  mock    Rakefile   script  tmp
bin  config.ru  features  Gemfile.lock  log  public  README.md  spec    vendor

person Jonathan Allard    schedule 12.02.2013    source источник
comment
Есть ли отличия в версиях системного гема и гема Bundler? В какой версии вы создали приложение Rails? Похоже, вы пытаетесь загрузить приложение Rails с версией, отличной от версии, с которой создаются фактические приложения.   -  person Novae    schedule 13.02.2013
comment
Вы скорее всего правы. Я думаю, дело в том, что я использую Edge, поэтому код загрузки может измениться в любое время. Я разбираюсь, запустив bundle exec rails new. Скоро выложу решение, надеюсь.   -  person Jonathan Allard    schedule 13.02.2013


Ответы (3)


Rails 4 действительно изменил способ загрузки.

К счастью, вам не нужно запускать rails-new, для этого есть удобная задача.

Примечания к выпуску Rails 4:

6.1  Заметные изменения

  • Исполняемые файлы вашего приложения теперь находятся в каталоге bin/. Запустите rake rails:update:bin, чтобы получить bin/bundle, bin/rails и bin/rake.
person Jonathan Allard    schedule 19.02.2013
comment
Спасибо за это. Хотя сегодняшнее развертывание в конце концов все же провалилось. - person red; 04.11.2014

В основном меня одолевала собственная лень. (Несмотря на то, что лень - мать эффективности; o)) сервер.

Rails 4.0.0.beta меняет способ загрузки. Но, поскольку я использовал свою «старую» версию Rails, старую бета-версию 4.0.0, которая лежала у меня в моих локальных драгоценных камнях, в которой не было изменений, я не заметил, когда изменения были внесены в мой пучок.

Теперь, когда пришло время развертывания, обязательный bundle-exec не мог загрузиться, потому что мой код использовался для загрузки по-старому.

Решение

Сделайте, как сказано в сообщении: bundle exec rails new .. И на этот раз используйте Bundle! В этот момент Rails сгенерирует стандартный материал, а именно отсутствующие загрузочные файлы, такие как ./bin/rails.

Он также обновит некоторые файлы конфигурации и попытается перезаписать некоторые вещи. В моем случае все проверяется в системе управления версиями, так что приходится немного сравнивать и выбирать, перезаписывать или нет, и потом возвращаться.

Возможно, лучшей идеей (я не удосужился) было бы разветвиться в Git, запустить «обновление» rails-new, перезаписать все, зафиксировать это, а затем выполнить трехстороннее слияние с основной веткой.

person Jonathan Allard    schedule 12.02.2013

Если ваша папка bin уже на месте, вам может понадобиться сначала запустить bundle install. Это решило проблему для меня после клонирования репозитория, который отлично работал на другой машине.

person aaron-coding    schedule 25.09.2016