我在Rails 4应用程序部署上得到一个NameError:未初始化的常量CoffeeScript :: ExecJS

时间:2015-03-04 09:14:21

标签: ruby-on-rails ruby-on-rails-4 bundler

我在我的Digital Ocean LAM-Rails VPS上部署了一个Rails 4应用程序。我已经开发了很长一段时间并且一直都很顺利但是现在当我想运行迁移或清理资产时我得到了这个错误:

NameError: uninitialized constant CoffeeScript::ExecJS
/usr/local/rvm/gems/ruby-2.1.1/gems/coffee-script-2.3.0/lib/coffee_script.rb:5:in `<module:CoffeeScript>'
/usr/local/rvm/gems/ruby-2.1.1/gems/coffee-script-2.3.0/lib/coffee_script.rb:4:in `<top (required)>'
/usr/local/rvm/gems/ruby-2.1.1/gems/coffee-script-2.3.0/lib/coffee-script.rb:1:in `require'
/usr/local/rvm/gems/ruby-2.1.1/gems/coffee-script-2.3.0/lib/coffee-script.rb:1:in `<top (required)>'
/usr/local/rvm/gems/ruby-2.1.1/gems/coffee-rails-4.0.1/lib/coffee-rails.rb:1:in `require'
/usr/local/rvm/gems/ruby-2.1.1/gems/coffee-rails-4.0.1/lib/coffee-rails.rb:1:in `<top (required)>'
/usr/local/rvm/gems/ruby-2.1.1@global/gems/bundler-1.6.2/lib/bundler/runtime.rb:76:in `require'
/usr/local/rvm/gems/ruby-2.1.1@global/gems/bundler-1.6.2/lib/bundler/runtime.rb:76:in `block (2 levels) in require'
/usr/local/rvm/gems/ruby-2.1.1@global/gems/bundler-1.6.2/lib/bundler/runtime.rb:72:in `each'
/usr/local/rvm/gems/ruby-2.1.1@global/gems/bundler-1.6.2/lib/bundler/runtime.rb:72:in `block in require'
/usr/local/rvm/gems/ruby-2.1.1@global/gems/bundler-1.6.2/lib/bundler/runtime.rb:61:in `each'
/usr/local/rvm/gems/ruby-2.1.1@global/gems/bundler-1.6.2/lib/bundler/runtime.rb:61:in `require'
/usr/local/rvm/gems/ruby-2.1.1@global/gems/bundler-1.6.2/lib/bundler.rb:132:in `require'
/var/www/html/kosarka/config/application.rb:7:in `<top (required)>'
/var/www/html/kosarka/Rakefile:4:in `require'
/var/www/html/kosarka/Rakefile:4:in `<top (required)>'
/usr/local/rvm/gems/ruby-2.1.1/bin/ruby_executable_hooks:15:in `eval'
/usr/local/rvm/gems/ruby-2.1.1/bin/ruby_executable_hooks:15:in `<main>'
(See full trace by running task with --trace)

我的Gem文件如下所示:

source 'https://rubygems.org'

# Bundle edge Rails instead: gem 'rails', github: 'rails/rails'
gem 'rails', '4.1.0'
# Use sqlite3 as the database for Active Record
group :development do
    gem 'sqlite3'
end
group :production do
    gem 'mysql2'
    gem 'therubyracer',  platforms: :ruby
    gem 'execjs'
end

#To validate delivery date is in the futurebund
gem 'date_validator'
# Use SCSS for stylesheets
gem 'sass-rails', '~> 4.0.3'
# Use Uglifier as compressor for JavaScript assets
gem 'uglifier', '>= 1.3.0'
# Use CoffeeScript for .js.coffee assets and views
gem 'coffee-rails', '~> 4.0.0'
# See https://github.com/sstephenson/execjs#readme for more supported runtimes
# gem 'therubyracer',  platforms: :ruby
# Use Paperclip for image upload
gem 'paperclip'
# Use jquery as the JavaScript library
gem 'jquery-rails'

gem 'jquery-turbolinks'

gem 'jquery-ui-rails'
# Turbolinks makes following links in your web application faster. Read more: https://github.com/rails/turbolinks
gem 'turbolinks'
# Build JSON APIs with ease. Read more: https://github.com/rails/jbuilder
gem 'jbuilder', '~> 2.0'
# bundle exec rake doc:rails generates the API under doc/api.
gem 'sdoc', '~> 0.4.0',          group: :doc

# Spring speeds up development by keeping your application running in the background. Read more: https://github.com/rails/spring
gem 'spring',        group: :development

# For development on Windows machines
gem 'tzinfo-data', platforms: [:mingw, :mswin, :x64_mingw]

# Use ActiveModel has_secure_password
gem 'bcrypt', '~> 3.1.7'

# Use unicorn as the app server
# gem 'unicorn'

# Use Capistrano for deployment
gem 'capistrano-rails', group: :development

# Use debugger
# gem 'debugger', group: [:development, :test]

我在Win7机器和Mac上都开发了这个应用程序,我在开发环境中运行它没有问题。

我在服务器上使用Phusion Passenger,通常只使用.sh脚本提取repo内容并运行rake migrate资产清理和预编译命令。

任何帮助都会有很大帮助。

2 个答案:

答案 0 :(得分:0)

替换此部分:

group :production do
    gem 'mysql2'
    gem 'therubyracer',  platforms: :ruby
    gem 'execjs'
end

gem 'mysql2'
gem 'therubyracer',  platforms: :ruby
gem 'execjs'

P.S。我认为你的应用程序在没有execjs gem的情况下也能正常工作。试着检查一下。

答案 1 :(得分:0)

这将是一个相当阴霾的答案。我已经看到很多关于stackOverflow的问题,但提示(rm -rf .bundle和缓存等)并没有帮助我。

所以我只是回到了一个旧的Gem文件和Gem.lock,它碰巧解决了这个问题。

然后我去了Bitbucket并查看了提交,并发现实际上它是 Gem.lock 中的所有版本更改(可能是意外的bundle更新而不是bundle install)引起了这个问题。

尽管在我的Gemfile中只有一个date_validator更改,我的Gem.lock充满了以下新版本:

bcrypt
capistrano
coffee-script-source
execjs
multi_json
jbuilder
spring

我仍然无法深入解决问题,但至少想出了如何避免它。