简体   繁体   English

Rails:jQuery在localhost上有效,但在Heroku上不可用

[英]Rails: jQuery works in localhost but not in production on heroku

When I go to localhost:3000 it works but as soon I push it to heroku it doesn't work. 当我转到localhost:3000时,它可以工作,但是一旦我将其推送到heroku,它就无法工作。 What am I doing wrong? 我究竟做错了什么? I am using mailboxer gem. 我正在使用邮箱宝石。

I've run bundle exec rake assets:precompile before pushing it to heroku. 我已经运行过bundle exec rake assets:precompile然后将其推送到heroku。 Any advice would be appreciated. 任何意见,将不胜感激。

views/layout/_header.html.erb 视图/布局/ _header.html.erb

<script>

$('#flash_wrapper').hide();
    $('#flash_wrapper').fadeIn("slow",function(){
    });
</script>

<script>
            $(document).ready(function() {
                setTimeout(function(){
                    $('#flash_wrapper').fadeOut("slow", function() {
                        $(this).remove();
                          })
                    }, 4500);
                });


</script>

application.js 的application.js

//= require_self
//= require jquery
//= require jquery_ujs
//= require turbolinks
//= require_tree .
//= require bootstrap-sprockets

Gemfile... 的Gemfile ...

source 'https://rubygems.org'

gem 'rails', '4.2.0'

gem 'mailboxer', '~> 0.12.5'
gem 'sass-rails', '~> 5.0'
gem 'uglifier', '>= 1.3.0'
gem 'coffee-rails', '~> 4.1.0'
gem 'jquery-rails'
gem 'turbolinks'
gem 'jbuilder', '~> 2.0'
gem 'sdoc', '~> 0.4.0', group: :doc
gem 'cancan', '~> 1.6.10'
gem 'stripe', '~> 1.21.0'
gem 'friendly_id', '~> 5.1.0'
gem 'formtastic', '~> 3.1.3'
gem 'aasm', '~> 4.1.0'
    group :development do
      gem 'byebug'
      gem 'web-console', '~> 2.0'
      gem 'spring'
      gem 'sqlite3'
    end


gem 'haml', '~> 4.0.6'
gem 'simple_form', '~> 3.1.0'
gem 'devise', '~> 3.4.1'
gem 'paperclip', '~> 4.2.1'
gem 'acts_as_votable', '~> 0.10.0'
gem 'bootstrap-sass', '~> 3.3.4.1' 
gem 'will_paginate', '~> 3.0.7'
gem 'will_paginate-bootstrap', '~> 1.0.1'
gem 'simple_form-bootstrap', '~> 1.0.1'

gem 'dotenv-rails', group: :development
gem 'aws-sdk', '< 2.0'

    group :production, :staging do
        gem 'pg', '~> 0.18.1'
        gem 'rails_12factor', '~> 0.0.3'
    end

Production.rb Production.rb

Rails.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 threaded 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 serving static files from the `/public` folder by default since
  # Apache or NGINX already handles this.
  config.serve_static_files = ENV['RAILS_SERVE_STATIC_FILES'].present?
  config.serve_static_assets = true

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

  # Do not fallback to assets pipeline if a precompiled asset is missed.
    config.assets.compile = true

  # Asset digests allow you to set far-future HTTP expiration dates on all assets,
  # yet still be able to expire them through the digest params.
  config.assets.digest = true

  # `config.assets.precompile` and `config.assets.version` have moved to config/initializers/assets.rb

  # 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

  # Use the lowest log level to ensure availability of diagnostic information
  # when problems arise.
  config.log_level = :debug

  # 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'

  # 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 cannot be found).
  config.i18n.fallbacks = true

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

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

  # Do not dump schema after migrations.
  config.active_record.dump_schema_after_migration = false

    config.paperclip_defaults = {
    :storage => :s3,
    :s3_protocol => 'http',
    :bucket => ENV['AWS_BUCKET'],
    :s3_credentials => {
      :access_key_id => ENV['AWS_ACCESS_KEY_ID'],
      :secret_access_key => ENV['AWS_SECRET_ACCESS_KEY']
    }
  }
end

Development.rb Development.rb

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

  # In the development environment your application's code is reloaded on
  # every request. This slows down response time but is perfect for development
  # since you don't have to restart the web server when you make code changes.
  config.cache_classes = false

  # Do not eager load code on boot.
  config.eager_load = false

  # Show full error reports and disable caching.
  config.consider_all_requests_local       = true
  config.action_controller.perform_caching = false

  # Don't care if the mailer can't send.
  config.action_mailer.raise_delivery_errors = false

  # Print deprecation notices to the Rails logger.
  config.active_support.deprecation = :log

  # Raise an error on page load if there are pending migrations.
  config.active_record.migration_error = :page_load

  # Debug mode disables concatenation and preprocessing of assets.
  # This option may cause significant delays in view rendering with a large
  # number of complex assets.
  config.assets.debug = true

  # Asset digests allow you to set far-future HTTP expiration dates on all assets,
  # yet still be able to expire them through the digest params.
  config.assets.digest = true

  # Adds additional error checking when serving assets at runtime.
  # Checks for improperly declared sprockets dependencies.
  # Raises helpful error messages.
  config.assets.raise_runtime_errors = true
  config.action_mailer.default_url_options = { host: 'localhost', port: 3000 }

  # Raises error for missing translations
  # config.action_view.raise_on_missing_translations = true

    config.paperclip_defaults = {
    :storage => :s3,
    :s3_protocol => 'http',
    :bucket => ENV['AWS_BUCKET'],
    :s3_credentials => {
      :access_key_id => ENV['AWS_ACCESS_KEY_ID'],
      :secret_access_key => ENV['AWS_SECRET_ACCESS_KEY']
    }
        }
end

When you ran rake assets:precompile, did you remember to check in those results into git. 当您运行rake asset:precompile时,您是否记得将这些结果检入git中。 If you didn't then they won't be pushed to heroku and therefore not be able to be consumed. 如果您不这样做,那么它们将不会被推送到heroku,因此无法被消耗。

The fix you suggested is probably not what you want long term, because it puts more strain on your servers and make them act like they would in development, where with every request the assets are 'evaluated' dynamically. 您建议的解决方案可能不是您长期想要的,因为它给您的服务器带来了更多压力,并使它们的行为像在开发中一样,在这种情况下,对每个请求的资产都进行“动态评估”。

Work towards a procedure for your deploy where you are compiling locally and checking them in for the deploy, or not having any assets compiled and letting heroku compile them for you. 为您的部署制定一个过程,在该过程中您将在本地进行编译并检入以进行部署,或者未编译任何资产并让heroku为您编译它们。

Cheers 干杯

J Ĵ

我通过将config.assets.debug = true添加到production.rb来修复它

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM