Rails Hartl Course: неопределенная локальная переменная или метод

Я слежу за книгой Хартла, глава 3, где мы начинаем со статических страниц. Нам сказано сделать:

$ git checkout -b static-pages

Никаких проблем с этим. Затем нам говорят выполнить команду:

$ rails generate controller StaticPages home help --no-test-framework

Когда я это делаю, я получаю это в командной строке:

sample_app/config/application.rb:31:in `<top (required)>': undefined local variable or method `config' for main:Object (NameError)
from /Users/NormalUse/.rvm/gems/ruby-2.0.0-p451@railstutorial_rails_4_0/gems/railties-4.0.5/lib/rails/commands.rb:43:in `require'
from /Users/NormalUse/.rvm/gems/ruby-2.0.0-p451@railstutorial_rails_4_0/gems/railties-4.0.5/lib/rails/commands.rb:43:in `<top (required)>'
from bin/rails:8:in `require'
from bin/rails:8:in `<main>'

Строка 31 config/application.rb:31 это:

config.assets.initialize_on_precompile = false

который я добавил из-за проблем Heroku. Я попытался убрать эту строку, а затем она выдала еще около 50 ошибок.

Вот гемфайл, который мы должны использовать

source 'https://rubygems.org'
ruby '2.0.0'
#ruby-gemset=railstutorial_rails_4_0
gem 'rails', '4.0.5'

group :development, :test do
gem 'sqlite3', '1.3.8'
gem 'rspec-rails', '2.13.1'
end

group :test do
gem 'selenium-webdriver', '2.35.1'
gem 'capybara', '2.1.0'
end

gem 'sass-rails', '4.0.1'
gem 'uglifier', '2.1.1'
gem 'coffee-rails', '4.0.1'
gem 'jquery-rails', '3.0.4'
gem 'turbolinks', '1.1.1'
gem 'jbuilder', '1.0.2'


group :doc do
gem 'sdoc', '0.3.20', require: false
end

group :production do
gem 'pg', '0.15.1'
gem 'rails_12factor', '0.0.2'
end

Вот полный файл application.rb:

require File.expand_path('../boot', __FILE__)

# Pick the frameworks you want:
require "active_model/railtie"
require "active_record/railtie"
require "action_controller/railtie"
require "action_mailer/railtie"
require "action_view/railtie"
require "sprockets/railtie"
#require "rails/test_unit/railtie"

# Require the gems listed in Gemfile, including any gems
# you've limited to :test, :development, or :production.
Bundler.require(*Rails.groups)

module SampleApp
class Application < Rails::Application
# Settings in config/environments/* take precedence over those specified here.
# Application configuration should go into files in config/initializers
# -- all .rb files in that directory are automatically loaded.

# Set Time.zone default to the specified zone and make Active Record auto-convert to     this zone.
# Run "rake -D time" for a list of tasks for finding time zone names. Default is UTC.
# config.time_zone = 'Central Time (US & Canada)'

# The default locale is :en and all translations from config/locales/*.rb,yml are auto  loaded.
# config.i18n.load_path += Dir[Rails.root.join('my', 'locales', '*.{rb,yml}').to_s]
# config.i18n.default_locale = :de
end
end
config.assets.initialize_on_precompile = false

Любые идеи, которые я могу попробовать?

РЕДАКТИРОВАТЬ: После перемещения этого: config.assets.initialize_on_precompile = false в класс, как было предложено ниже, я получаю много ошибок!

Вот первые 5 строк ошибок: /Users/NormalUse/ror/sample_app/config/environments/development.rb:1:in `<top (required)>': undefined method `configure' for #<SampleApp::Application:0x007fa2178a73a0> (NoMethodError) from /Users/NormalUse/.rvm/gems/ruby-2.0.0-p451@railstutorial_rails_4_0/gems/activesupport-4.0.5/lib/active_support/dependencies.rb:229:in `require' from /Users/NormalUse/.rvm/gems/ruby-2.0.0-p451@railstutorial_rails_4_0/gems/activesupport-4.0.5/lib/active_support/dependencies.rb:229:in `block in require' from /Users/NormalUse/.rvm/gems/ruby-2.0.0-p451@railstutorial_rails_4_0/gems/activesupport-4.0.5/lib/active_support/dependencies.rb:214:in `load_dependency' from /Users/NormalUse/.rvm/gems/ruby-2.0.0-p451@railstutorial_rails_4_0/gems/activesupport-4.0.5/lib/active_support/dependencies.rb:229:in `require' from /Users/NormalUse/.rvm/gems/ruby-2.0.0-p451@railstutorial_rails_4_0/gems/railties-4.0.5/lib/rails/engine.rb:591:in `block (2 levels) in <class:Engine>'

РЕДАКТИРОВАТЬ РЕДАКТИРОВАТЬ: Я просто хочу сказать большое спасибо за тех, кто помог мне с этим. Я не могу себе представить, как тяжело и неприятно пытаться помочь тем из нас, кто ДЕЙСТВИТЕЛЬНО новичок во всем этом. Сейчас я путешествую, когда мы установили, что две разные версии Rails были конфликтующими.

4 ответа

Решение

Поздно к вечеринке, но я (надеюсь!) Пришел с ответом: почти наверняка у вас установлены как Rails 4.1, так и Rails 4.0. Формат, с которым у вас возникли проблемы, подходит для Rails 4.1 и будет сгенерирован Rails 4.1.

Вы можете проверить, какие версии установлены, запустив gem list --local rails,

Итак, вы проверили и увидели, что у вас установлены обе версии. Что теперь? Вы должны удалить один?

Нету! Просто укажите номер версии, заключенный в подчеркивание, при создании нового проекта:

rails _4.0.5_ new my_awesome_project

Если номер версии не указан, он будет использовать самую последнюю доступную версию - таким образом, ваш совершенно корректный проект Rails 4.1, который внезапно прекратится, когда вы замените Gemfile.

Что если вы положите это в класс?

module SampleApp
  class Application < Rails::Application
    config.assets.initialize_on_precompile = false
  end
end

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

gem 'rails', '4.0.4'

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

Хорошо, похоже Rails.application.configure do в моем файле config/environment /development.rb нужно было изменить на: SampleApp::Application.configure do, Благодаря этому вопросу и ответу

Другие вопросы по тегам