【问题标题】:ActiveAdmin uninitialized constantActiveAdmin 未初始化常量
【发布时间】:2018-07-26 04:39:54
【问题描述】:

将我的应用程序部署到我的 VPS 后,我收到以下错误。 ActiveAdmin 在我的本地开发环境中运行良好,但是一旦我使用 capistrano 进行部署,似乎没有安装 gem?

E, [2013-03-14T01:27:04.901577 #24972] ERROR -- : uninitialized constant ActiveAdmin (NameError)
/home/deployer/apps/papaya/releases/20130314052558/config/initializers/active_admin.rb:1:in `<top (required)>'

我的宝石文件

source 'https://rubygems.org'

gem 'rails', '3.2.11'

# Bundle edge Rails instead:
# gem 'rails', :git => 'git://github.com/rails/rails.git'

gem 'pg'
gem 'bootstrap-sass'
gem 'font-awesome-sass-rails'
# gem 'acts_as_tree', :git => 'git://github.com/amerine/acts_as_tree.git'
gem 'closure_tree'
gem 'kaminari'
gem 'friendly_id'
gem 'slim'
gem 'gmaps4rails'
gem 'devise'
gem 'omniauth'
gem 'oauth2'
gem 'omniauth-facebook'
gem 'omniauth-twitter'
gem 'simple_form'
gem 'pg_search'
gem 'stamp'
gem 'acts-as-taggable-on', '~> 2.3.1'
gem 'rmagick'
gem 'carrierwave'
gem 'select2-rails'
# gem 'roo'
gem 'activeadmin'
gem "meta_search",    '>= 1.1.0.pre'

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

  # See https://github.com/sstephenson/execjs#readme for more supported runtimes
  # gem 'therubyracer', :platforms => :ruby
  gem 'uglifier', '>= 1.0.3'
  gem 'compass-rails'
  gem 'turbo-sprockets-rails3'
end

我可以毫无问题地运行控制台并且需要activeadmin

deployer@pareto:~/apps/papaya/current$ RAILS_ENV=production bundle exec irb
irb(main):001:0> require 'activeadmin'
=> true
irb(main):002:0>

【问题讨论】:

  • 你能验证你和你的 VPS 有相同版本的 Ruby 吗?
  • 是的,两者都在运行ruby 1.9.3p194 (2012-04-20 revision 35410)

标签: ruby-on-rails activeadmin


【解决方案1】:

发生了什么?

当需要定义常量的 gem 时,例如 ActiveAdminActiveAdmin::Comment,如果在定义该常量期间由于某种原因出现问题,Bundler 会留下该常量未定义并且不会重新引发异常。

可能的原因

ActiveAdmin 依赖于 ExecJSExecJS 需要一个工作的 JavaScript 运行时。 ExecJS 在定义ActiveAdmin 常量时会抛出这样的错误。

ExecJS::RuntimeUnavailable: Could not find a JavaScript runtime. See https://github.com/sstephenson/execjs for a list of available runtimes.

在这种情况下,只需安装 Node.js。 sudo apt-get install nodejs

如何调试这样的问题

  1. 尝试运行 Rails 控制台。 bundle exec rails console
  2. 如果失败,请尝试在 irb 中手动 require 有问题的 gem,并处理其依赖项。
  3. 如果应该定义但没有定义的 gem 或部件,则需要它。当需要手动 Rubygems 时会抛出描述问题的异常。
  4. 处理异常并修复它们,直到问题得到解决。

【讨论】:

  • 我也遇到过,所以请检查您的 JS 运行时。
  • @AlexTonkonozhenko 这是关于如何调试而不是检查你的 js 运行时。此类错误经常发生,请考虑了解方法。
  • 我知道,但我很惊讶 ActiveAdmin 依赖于 JS
【解决方案2】:

尝试重新启动 rails 服务器。有类似的问题,重启后就解决了。

【讨论】:

    【解决方案3】:

    我在我的 active_admin.rb 初始化程序中添加了一个 require 'activeadmin' 并且它有效!

    【讨论】:

      【解决方案4】:

      您可能没有在生产环境中运行 bundle install。

      尝试在生产环境中运行bundle install

      【讨论】:

      • Capistrano 在部署时运行它
      • 使用 'bundler show activeadmi'n 来查看它是否真正安装在 prod 中
      【解决方案5】:

      @alexBrand 的解决方案对我不起作用。

      相反,在配置块中添加require 'activeadmin/cancan_adapter' 对我有用。

      【讨论】:

        【解决方案6】:

        从 gem-file 中取消注释 (gem 'therubyracer', platforms: :ruby) gem 然后 bundle..it 可以工作

        【讨论】:

          【解决方案7】:

          只需转到您的 routes 并删除 active_admin routes 并运行 rails destroy active_admin:install

          【讨论】:

            猜你喜欢
            • 2013-10-12
            • 2013-05-30
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            相关资源
            最近更新 更多