Rails 5.1.4生产环境下控制台无法找到模型。

4
我认为我的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

我猜我的控制台现在已经丢失并且没有正确加载项目源代码。
我该怎样解决这种情况?
编辑2018-02-15:我将我的工作站连接到生产环境以使用控制台。起初这很有效,控制台的表现非常好。但是几次之后又出现了相同的问题。在执行spring stop后,我又能够在本地的工作站上打开prod中的控制台。有趣的事实是:虽然spring在开发环境中运行应用程序,但这从未发生过。
原来spring也在生产环境中运行,尽管spring gem仅在开发组中。(见下面)
Gemfile
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'

在生产服务器上 - rapdev
不,我正在AWS上运行。我也尝试过使用“RAILS_ENV=production bundle exec rails c”。 - rapdev
我能够从另一台计算机打开连接到这个数据库的控制台。我想这可能与线程或数据库连接池有关,我该如何进行故障排除? - rapdev
在原始问题中添加了更多信息 - rapdev
1
我在我的生产机器上运行5.1.4版本的Passenger时遇到了完全相同的问题。 运行“spring stop”解决了它。 - Dan
显示剩余4条评论
1个回答

0
如果您是通过Docker部署,请确保在运行命令中使用-ti前缀,例如:
docker exec -ti 4d318d505e9f rails c production

-ti 意味着在交互式 shell 中运行 rails c,而 4d318d505e9f 这个数字是指要打开此 shell 的 Docker 镜像。我完全不知道你写的东西与问题有什么关系。 - undefined

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接