Подтвердить что ты не робот

Почему "рельсы" не работают из каталога приложений?

Я в папке своего приложения, но команда 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 Rails, и он делает немало изменений в 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
4b9b3361

Ответ 1

Кажется, вы не находитесь в каталоге 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, если версия более новая, это сообщение покажет вам, как создать новую приложение, использующее более старую версию).

Ответ 2

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

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

Ответ 3

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

rake rails:update:bin

После этого запуск rails s выполнялся как ожидалось.

Ответ 4

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

# from command line
bundle install

Ответ 5

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

Ответ 6

Сначала проверьте свой путь местоположения, а затем

bundle install

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

/bin/bash --login
bundle install

Ответ 7

Если вы используете rvm или rbenv, например, чтобы сохранить несколько рубиновых версий, возможно, ваша версия по умолчанию 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

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