Почему "rails s" не работает из каталога приложения?

Я в папке с моим приложением, но команда rails s не работает. Я прочитал довольно много постов о переполнении стека, и большинство из них, похоже, принадлежат пользователям, которых нет в каталоге их приложений.

Кроме того, я создал несколько других приложений. Я проверил их, и сервер Rails работает для всех этих приложений. Это единственный, где я не могу его запустить.

Выход из which rails:

/Users/jmcrist/.rvm/gems/ruby-2.0.0-p247/bin/rails

Выход из rails s:

MacBook-Pro:first_app jmcrist$ rails s
Usage:
  rails new APP_PATH [options]

Options:
  -r, [--ruby=PATH]              # Path to the Ruby binary of your choice
                                 # Default: /Users/jmcrist/.rvm/rubies/ruby-2.0.0-p247/bin/ruby
  -b, [--builder=BUILDER]        # Path to a application builder (can be a filesystem path or URL)
  -m, [--template=TEMPLATE]      # Path to an application template (can be a filesystem path or URL)
      [--skip-gemfile]           # Don't create a Gemfile
      [--skip-bundle]            # Don't run bundle install
  -G, [--skip-git]               # Skip Git ignores and keeps
  -O, [--skip-active-record]     # Skip Active Record files
  -S, [--skip-sprockets]         # Skip Sprockets files
  -d, [--database=DATABASE]      # Preconfigure for selected database (options: mysql/oracle/postgresql/sqlite3/frontbase/ibm_db/sqlserver/jdbcmysql/jdbcsqlite3/jdbcpostgresql/jdbc)
                                 # Default: sqlite3
  -j, [--javascript=JAVASCRIPT]  # Preconfigure for selected JavaScript library
                                 # Default: jquery
  -J, [--skip-javascript]        # Skip JavaScript files
      [--dev]                    # Setup the application with Gemfile pointing to your Rails checkout
      [--edge]                   # Setup the application with Gemfile pointing to Rails repository
  -T, [--skip-test-unit]         # Skip Test::Unit files
      [--old-style-hash]         # Force using old style hash (:foo => 'bar') on Ruby >= 1.9

Runtime options:
  -f, [--force]    # Overwrite files that already exist
  -p, [--pretend]  # Run but do not make any changes
  -q, [--quiet]    # Suppress status output
  -s, [--skip]     # Skip files that already exist

Rails options:
  -h, [--help]     # Show this help message and quit
  -v, [--version]  # Show Rails version number and quit

Description:
    The 'rails new' command creates a new Rails application with a default
    directory structure and configuration at the path you specify.

    You can specify extra command-line arguments to be used every time
    'rails new' runs in the .railsrc configuration file in your home directory.

    Note that the arguments specified in the .railsrc file don't affect the
    defaults values shown above in this help message.

Example:
    rails new ~/Code/Ruby/weblog

    This generates a skeletal Rails installation in ~/Code/Ruby/weblog.
    See the README in the newly created application to get going.

Я работаю над Hartl's Rails Tutorial, и он делает немало модификаций в gemfile. Мне интересно, может ли это быть причиной?

source 'https://rubygems.org'

gem 'rails', '3.2.13'

group :development do
  gem 'sqlite3', '1.3.5'
end


# Gems used only for assets and not required
# in production environments by default.
group :assets do
  gem 'sass-rails',   '3.2.5'
  gem 'coffee-rails', '3.2.2'

  gem 'uglifier', '1.2.3'
end

gem 'jquery-rails', '2.0.2'

group :production do
  gem 'pg', '0.12.2'
end

8 ответов

Решение

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

В зависимости от вашей версии Rails определяет это по-разному. На 3.2 он проверяет файл в script/rails, Теперь, когда 4.0 был выпущен, он ищет либо script/rails или же bin/rails ( https://github.com/rails/rails/blob/207fa5c11ddf1cfd696f0eeb07d6466aae9d451e/railties/lib/rails/app_rails_loader.rb#L6)

Предположительно, вы можете обойти это, создав файл rails в вашем script каталог (если у вас нет script каталог, создайте его в корне своего приложения):

#!/usr/bin/env ruby
# This command will automatically be run when you run "rails" with Rails 3 gems installed from the root of your application.

APP_PATH = File.expand_path('../../config/application',  __FILE__)
require File.expand_path('../../config/boot',  __FILE__)
require 'rails/commands'

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

Возможные причины:

  • вы не в каталоге, который содержит полное приложение рельсы
  • ваш bin каталог может быть пустым, попробуйте запустить rake rails:update:bin (для Rails 4) или rails app:update:bin (Рельсы 5)

Все приведенные выше ответы не помогли мне. Что решило мою проблему для Rails 4 было запустить команду в корневом каталоге моего приложения:

rake rails:update:bin

После этого бега rails s бежал, как и ожидалось.

Если вы используете rvm или же rbenv например, чтобы сохранить несколько версий ruby, может быть, по умолчанию rails версия для этого конкретного ruby версия отличается от проекта, который вы пытаетесь запустить, и поэтому не может обнаружить ваше приложение.

Чтобы убедиться, что вы используете право rails В версии вы можете сравнить оба результата. Вот что у меня есть:

$ rails -v
Rails 3.1.0

в

$ bundle exec rails -v
Rails 5.0.0.1

В этом случае вы можете оставить значение по умолчанию rails версия, а затем использовать:

$ bundle exec rails server

Или установите конкретный rails gem к тому самому ruby версия с:

$ gem install rails -v 5.0.0.1
$ rails -v
Rails 5.0.0.1

И затем запустите его с помощью менее подробной команды:

$ rails s

Я надеюсь, что это станет полезным для других людей в такой же ситуации!

Вы, вероятно, еще не связали свои драгоценные камни:

# from command line
bundle install

У меня была эта проблема, мне потребовалось несколько минут, чтобы понять, что я забыл изменить активную версию Ruby с помощью chruby. Различные Ruby подразумевали другую версию Rails, которая искала соответствующий файл в другой папке.

Это работает для меня.!!!(ПРИМЕЧАНИЕ: запустите эти команды в приложении rails)

      rake db:migrate RAILS_ENV=development;

Запустите эту команду, чтобы сгенерировать /bin

      rake rails:update:bin

ИЛИ

      rake app:update:bin

=============================================

Тогда вы получите такой экран (In the Go with Y)

      bin/rails? (enter "h" for help) [Ynaqdhm]  Y

Затем вы можете запустить сервер, используя

      rails s

Сначала уточните путь к вашему местоположению, а затем

bundle install

Если все еще не работает, введите

/bin/bash --login
bundle install
Другие вопросы по тегам