【问题标题】:rails 5.1.4 console in production doesn't find models生产中的 rails 5.1.4 控制台找不到模型
【发布时间】:2018-02-09 11:29:21
【问题描述】:

我认为我在生产中的 rails 设置存在配置问题。

我的 puma 工作正常,没有任何问题(连接到数据库、加载模型等),并且以前能够使用控制台(我遇到过这个 [bug][https://github.com/rails/rails/issues/19256],但通过填充来解决它在database.yml中)

当我尝试打开控制台执行一些小操作时,找不到我的模型类。

✗ bundle exec rails console production
Running via Spring preloader in process 18313
Loading production environment (Rails 5.1.4)
irb(main):001:0> User.count
NameError: uninitialized constant User
        from (irb):1
irb(main):002:0>

关于 SO 的类似问题建议运行 ActiveRecord::Base.subclasses 并最终运行 Rails.application.eager_load!

当我尝试运行 Rails.application.eager_load! 时,出现未初始化的常量错误

irb(main):005:0> Rails.application.eager_load!
NameError: uninitialized constant ApplicationController
Did you mean?  ApplicationCable
        from app/controllers/accounts_controller.rb:1:in `<top (required)>'
        from (irb):5

所以我猜我的控制台现在不知何故丢失了,并且没有正确加载项目源代码。

我该如何解决这种情况?

edit 2018-02-15:我将工作站连接到 prod 环境以使用控制台。起初这很有效,控制台运行正常。几次之后,同样的问题出现了。在完成spring stop 之后,我能够再次使用我的本地工作站在产品中打开控制台。 有趣的事实:这在开发环境中从未发生过,尽管 spring 有一个应用程序在此环境中运行。 事实证明 spring 也在 prod 中运行,尽管 spring gem 只在 dev 组中。 (见下文)

宝石文件

source 'https://rubygems.org'

git_source(:github) do |repo_name|
  repo_name = "#{repo_name}/#{repo_name}" unless repo_name.include?("/")
  "https://github.com/#{repo_name}.git"
end

gem 'rails', '~> 5.1.4'
gem 'puma', '~> 3.7'
gem 'sass-rails', '~> 5.0'
gem 'uglifier', '>= 1.3.0'
gem 'therubyracer', platforms: :ruby

gem 'coffee-rails', '~> 4.2'
gem 'jbuilder', '~> 2.5'

group :development, :test do
   gem 'byebug', platforms: [:mri, :mingw, :x64_mingw]
   gem 'capybara', '~> 2.13'
  gem 'selenium-webdriver'
  gem 'rails-erd', require: false, group: :development
end

group :development do
  gem 'web-console', '>= 3.3.0'
  gem 'listen', '>= 3.0.5', '< 3.2'
  gem 'spring'
  gem 'spring-watcher-listen', '~> 2.0.0'
  gem 'pry'
  gem 'pry-byebug'
end

gem 'tzinfo-data', platforms: [:mingw, :mswin, :x64_mingw, :jruby]

gem 'devise'
gem 'devise-i18n'
gem 'cancancan', '~> 2.0'
gem 'rolify'
gem 'redis', '~> 3.2'

group :production do
  gem "sidekiq"
  gem "sentry-raven"
end

gem 'pg'
gem "paperclip", "~> 5.0.0"
gem 'i18n-country-translations'
gem 'rails-i18n', '~> 5.0.0'
gem 'i18n_alchemy'
gem 'wicked_pdf'
gem 'wkhtmltopdf-binary'

【问题讨论】:

  • 你是在生产服务器上运行它,还是在本地机器上运行?
  • 在生产服务器上
  • 你使用 Heroku 还是其他的?如果您使用 Heroku,您可以尝试发出 heroku run rails console。如果它已经设置为生产环境。此外,您是否尝试过设置Rails.env = "production",然后运行rails console production
  • 不,我在 aws 中运行。我也试过使用RAILS_ENV=production bundle exec rails c
  • 我在Passenger下运行5.1.4的生产机器上遇到了完全相同的问题。运行spring stop 解决了它。

标签: ruby-on-rails-5


【解决方案1】:

如果您通过 Docker 部署,请确保在运行命令中使用 -ti 前缀,例如:

docker exec -ti 4d318d505e9f rails c production

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2011-05-17
    • 2018-04-03
    • 1970-01-01
    • 1970-01-01
    • 2015-05-05
    • 2013-02-15
    • 1970-01-01
    相关资源
    最近更新 更多