部署 Rails 4 报错 ActionDispatch::Session::EncryptedCookieStore

xiaoronglv · August 23, 2013 · Last by xiaoronglv replied at August 23, 2013 · 3299 hits

capistrano 部署 rails 4,执行 assets:precompile 遇到错误。按照官网的建议,我把 capistrano 升级到 2.15.5,问题依旧没解决啊,怎么办?

折腾了 1 天了,求指点。

servers: ["192.155.83.174"]
    [192.155.83.174] executing command
 ** [out :: 192.155.83.174] rake aborted!
 ** [out :: 192.155.83.174] uninitialized constant ActionDispatch::Session::EncryptedCookieStore
 ** [out :: 192.155.83.174] /home/deployer/apps/chalkboard/shared/bundle/ruby/2.0.0/gems/railties-4.0.0/lib/rails/application/configuration.rb:144:in `const_get'
 ** [out :: 192.155.83.174] /home/deployer/apps/chalkboard/shared/bundle/ruby/2.0.0/gems/railties-4.0.0/lib/rails/application/configuration.rb:144:in `session_store'
 ** [out :: 192.155.83.174] /home/deployer/apps/chalkboard/shared/bundle/ruby/2.0.0/gems/railties-4.0.0/lib/rails/application.rb:346:in `block in default_middleware_stack'
 ** [out :: 192.155.83.174] /home/deployer/apps/chalkboard/shared/bundle/ruby/2.0.0/gems/railties-4.0.0/lib/rails/application.rb:308:in `tap'
 ** [out :: 192.155.83.174] 
 ** [out :: 192.155.83.174] /home/deployer/apps/chalkboard/shared/bundle/ruby/2.0.0/gems/railties-4.0.0/lib/rails/application.rb:308:in `default_middleware_stack'
 ** [out :: 192.155.83.174] /home/deployer/apps/chalkboard/shared/bundle/ruby/2.0.0/gems/railties-4.0.0/lib/rails/engine.rb:494:in `app'
 ** [out :: 192.155.83.174] 
 ** [out :: 192.155.83.174] /home/deployer/apps/chalkboard/shared/bundle/ruby/2.0.0/gems/railties-4.0.0/lib/rails/application/finisher.rb:34:in `block in <module:Finisher>'
 ** [out :: 192.155.83.174] /home/deployer/apps/chalkboard/shared/bundle/ruby/2.0.0/gems/railties-4.0.0/lib/rails/initializable.rb:30:in `instance_exec'
 ** [out :: 192.155.83.174] /home/deployer/apps/chalkboard/shared/bundle/ruby/2.0.0/gems/railties-4.0.0/lib/rails/initializable.rb:30:in `run'
 ** [out :: 192.155.83.174] /home/deployer/apps/chalkboard/shared/bundle/ruby/2.0.0/gems/railties-4.0.0/lib/rails/initializable.rb:55:in `block in run_initializers'
 ** [out :: 192.155.83.174] 
 ** [out :: 192.155.83.174] /home/deployer/apps/chalkboard/shared/bundle/ruby/2.0.0/gems/railties-4.0.0/lib/rails/initializable.rb:54:in `run_initializers'
 ** [out :: 192.155.83.174] /home/deployer/apps/chalkboard/shared/bundle/ruby/2.0.0/gems/railties-4.0.0/lib/rails/application.rb:215:in `initialize!'
 ** [out :: 192.155.83.174] /home/deployer/apps/chalkboard/shared/bundle/ruby/2.0.0/gems/railties-4.0.0/lib/rails/railtie/configurable.rb:30:in `method_missing'
 ** [out :: 192.155.83.174] /home/deployer/apps/chalkboard/releases/20130823050332/config/environment.rb:5:in `<top (required)>'
 ** [out :: 192.155.83.174] 
 ** [out :: 192.155.83.174] /home/deployer/apps/chalkboard/shared/bundle/ruby/2.0.0/gems/railties-4.0.0/lib/rails/application.rb:189:in `require_environment!'
 ** [out :: 192.155.83.174] /home/deployer/apps/chalkboard/shared/bundle/ruby/2.0.0/gems/railties-4.0.0/lib/rails/application.rb:249:in `block in run_tasks_blocks'
 ** [out :: 192.155.83.174] /
 ** [out :: 192.155.83.174] home/deployer/apps/chalkboard/shared/bundle/ruby/2.0.0/gems/sprockets-rails-2.0.0/lib/sprockets/rails/task.rb:54:in `block (2 levels) in define'
 ** [out :: 192.155.83.174] Tasks: TOP => environment
 ** [out :: 192.155.83.174] (See full trace by running task with --trace)
    command finished in 5548ms
*** [deploy:update_code] rolling back
  * executing "rm -rf /home/deployer/apps/chalkboard/releases/20130823050332; true"
    servers: ["192.155.83.174"]
    [192.155.83.174] executing command
    command finished in 1549ms


failed: "rvm_path=/usr/local/rvm /usr/local/rvm/bin/rvm-shell 'ruby-2.0.0-p247' -c 'cd -- /home/deployer/apps/chalkboard/releases/20130823050332 && RAILS_ENV=production RAILS_GROUPS=assets bundle exec rake assets:precompile'" on 192.155.83.174

这应该和 Capistrano 无关,你试试在你本地执行

$ RAILS_ENV=production RAILS_GROUPS=assets bundle exec rake assets:precompile

应该是跑不起来的

你把 config/environments/production.rb 发出来看看

#2 楼 @huacnlee

谢谢华顺指点。

我在本地也跑不起来,看来和 capistrano 没啥关系。

config/environments/production.rb


Chalkboard::Application.configure do
  # Settings specified here will take precedence over those in config/application.rb.

  # Code is not reloaded between requests.
  config.cache_classes = true

  # Eager load code on boot. This eager loads most of Rails and
  # your application in memory, allowing both thread web servers
  # and those relying on copy on write to perform better.
  # Rake tasks automatically ignore this option for performance.
  config.eager_load = true

  # Full error reports are disabled and caching is turned on.
  config.consider_all_requests_local       = false
  config.action_controller.perform_caching = true

  # Enable Rack::Cache to put a simple HTTP cache in front of your application
  # Add `rack-cache` to your Gemfile before enabling this.
  # For large-scale production use, consider using a caching reverse proxy like nginx, varnish or squid.
  # config.action_dispatch.rack_cache = true

  # Disable Rails's static asset server (Apache or nginx will already do this).
  config.serve_static_assets = false

  # Compress JavaScripts and CSS.
  config.assets.js_compressor  = :uglifier
  # config.assets.css_compressor = :sass

  # Whether to fallback to assets pipeline if a precompiled asset is missed.
  config.assets.compile = false

  # Generate digests for assets URLs.
  config.assets.digest = true

  # Version of your assets, change this if you want to expire all your assets.
  config.assets.version = '1.0'

  # Specifies the header that your server uses for sending files.
  # config.action_dispatch.x_sendfile_header = "X-Sendfile" # for apache
  # config.action_dispatch.x_sendfile_header = 'X-Accel-Redirect' # for nginx

  # Force all access to the app over SSL, use Strict-Transport-Security, and use secure cookies.
  # config.force_ssl = true

  # Set to :debug to see everything in the log.
  config.log_level = :info

  # Prepend all log lines with the following tags.
  # config.log_tags = [ :subdomain, :uuid ]

  # Use a different logger for distributed setups.
  # config.logger = ActiveSupport::TaggedLogging.new(SyslogLogger.new)

  # Use a different cache store in production.
  # config.cache_store = :mem_cache_store

  # Enable serving of images, stylesheets, and JavaScripts from an asset server.
  # config.action_controller.asset_host = "http://assets.example.com"

  # Precompile additional assets.
  # application.js, application.css, and all non-JS/CSS in app/assets folder are already added.
  # config.assets.precompile += %w( search.js )

  # Ignore bad email addresses and do not raise email delivery errors.
  # Set this to true and configure the email server for immediate delivery to raise delivery errors.
  # config.action_mailer.raise_delivery_errors = false

  # Enable locale fallbacks for I18n (makes lookups for any locale fall back to
  # the I18n.default_locale when a translation can not be found).
  config.i18n.fallbacks = true

  # Send deprecation notices to registered listeners.
  config.active_support.deprecation = :notify

  # Disable automatic flushing of the log to improve performance.
  # config.autoflush_log = false

  # Use default logging formatter so that PID and timestamp are not suppressed.
  config.log_formatter = ::Logger::Formatter.new
end

session_store.rb 里面是不是有 encrypted_cookie_store ?

#4 楼 @huacnlee

确实是这个原因。

非常感谢啊。

😄

You need to Sign in before reply, if you don't have an account, please Sign up first.