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

Ответы

Ответ 1

Rails 4 изменил способ загрузки.

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

Заметки о выпуске Rails 4:

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

  • Теперь исполняемые файлы приложения находятся в директории bin/. Запустите rake rails:update:bin, чтобы получить bin/bundle, bin/rails и bin/rake.

Ответ 2

В основном, у меня была моя ленивость. (Хотя лень является матерью эффективности, o)) Я сделал пункт не используя Bundle при запуске Rails-сервера.

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

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

Решение

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

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

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

Ответ 3

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