【问题标题】:Rails Capistrano precompile assets locally not loading on productionRails Capistrano 在本地预编译资产未在生产中加载
【发布时间】:2016-10-21 17:42:34
【问题描述】:

我将我的 rails 应用程序部署到 AWS 服务器并尝试运行 rake 资产:在本地预编译并在部署时上传。由于服务器上的内存不足问题,

这是我的 deploy.rb

# config valid only for current version of Capistrano
lock '3.5.0'

set :application, 'fullpower_tee'
set :repo_url, 'git_repo' # Edit this to match your repository
set :branch, :master
set :deploy_to, '/home/deploy/fullpower_tee'
set :pty, true
set :linked_files, %w{config/database.yml config/application.yml}
set :linked_dirs, %w{bin log tmp/pids tmp/cache tmp/sockets vendor/bundle public/system public/uploads}
set :keep_releases, 2
set :rvm_type, :user
set :rvm_ruby_version, 'ruby-2.2.1'


set :puma_rackup, -> { File.join(current_path, 'config.ru') }
set :puma_state, "#{shared_path}/tmp/pids/puma.state"
set :puma_pid, "#{shared_path}/tmp/pids/puma.pid"
set :puma_bind, "unix://#{shared_path}/tmp/sockets/puma.sock"    #accept array for multi-bind
set :puma_conf, "#{shared_path}/puma.rb"
set :puma_access_log, "#{shared_path}/log/puma_error.log"
set :puma_error_log, "#{shared_path}/log/puma_access.log"
set :puma_role, :app
set :puma_env, fetch(:rack_env, fetch(:rails_env, 'production'))
set :puma_threads, [0, 8]
set :puma_workers, 0
set :puma_worker_timeout, nil
set :puma_init_active_record, true
set :puma_preload_app, false


namespace :deploy do
  namespace :assets do

    Rake::Task['deploy:assets:precompile'].clear_actions

    desc 'Precompile assets locally and upload to servers'
    task :precompile do
      on roles(fetch(:assets_roles)) do
        run_locally do
          with rails_env: fetch(:rails_env) do
            execute 'bin/rake assets:precompile'
          end
        end

        within release_path do
          with rails_env: fetch(:rails_env) do
            old_manifest_path = "#{shared_path}/public/assets/manifest*"
            execute :rm, old_manifest_path if test "[ -f #{old_manifest_path} ]"
            upload!('./public/assets/', "#{shared_path}/public/", recursive: true)
          end
        end

        run_locally { execute 'rm -rf public/assets' }
      end
    end

  end
end

namespace :deploy do

  after :restart, :clear_cache do
    on roles(:web), in: :groups, limit: 3, wait: 10 do
      # Here we can do anything such as:
      # within release_path do
      #   execute :rake, 'cache:clear'
      # end
    end
  end

end

还有我的 config/environments/production.rb

  # Compress JavaScripts and CSS
  config.assets.compress = true

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

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

  # config.assets.precompile += %w( *.css *.js )

  # Add the fonts path
  config.assets.paths << "#{Rails.root}/app/assets/fonts"

  # Precompile additional assets
  config.assets.precompile += %w( .svg .eot .woff .ttf )
  config.assets.precompile += %w( *.js )
  config.assets.precompile += [ 'admin.css',
                                'bootstrap.css',
                                'dark-red-theme.css',
                                'style.css',
                                'jquery.growl.css',
                                'default-theme.css',
                                'font-awesome.css',
                                'jquery.simpleLens.css',
                                'jquery.smartmenus.bootstrap.css',
                                'nouislider.css',
                                'sequence-theme.modern-slide-in.css',
                                'slick.css',
                                'admin/app.css',
                                'admin/cart.css',
                                'admin/foundation.css',
                                'admin/normalize.css',
                                'admin/help.css',
                                'admin/ie.css',
                                'autocomplete.css',
                                'application.css',
                                'foundation.css',
                                'home_page.css',
                                'login.css',
                                'markdown.css',
                                'myaccount.css',
                                'normalize.css',
                                'pikachoose_product.css',
                                'product_page.css',
                                'products_page.css',
                                'shopping_cart_page.css',
                                'signup.css',
                                'site/app.css',
                                'sprite.css',
                                'tables.css',
                                'cupertino/jquery-ui-1.8.12.custom.css',# in vendor
                                'scaffold.css' # in vendor
                                ]

我的 application.rb 有

config.assets.initialize_on_precompile = false

capistrano 部署成功地能够在本地预编译资产,然后将其上传到 shared/public 目录,但是我看不到资产加载到我的网站上,从一天开始就陷入这个问题请帮助!

这是我的浏览器日志

【问题讨论】:

    标签: ruby-on-rails ruby capistrano


    【解决方案1】:

    编辑

    鉴于您的 URL 是 404,并且它不会显示请求包含哈希,您需要确保在您的布局/视图文件中使用 stylesheet_link_tag 来加载 css 文件。以及将 CSS 本身中的各种资产助手用于背景图像。

    http://guides.rubyonrails.org/asset_pipeline.html#coding-links-to-assets

    Capistrano 从 git 部署。如果您不想将共享资产推送到您的 github,则可以将其配置为从本地存储库中提取,但无论资产需要在源代码管理中。

    set :repo_url, 'file:///path/to/repo/.git'
    

    将其设置为本地存储库。

    如果您绝对不想在您的 git 存储库中存储已编译的更改,您可以在 rake assets:precompile 完成后运行 scp 命令。

    execute 'scp -r public/assets/* user@serverip:/var/www/apps/yourapppath/shared/public/assets/*'
    

    当然让它指向正确的位置。

    我还想认为您可以通过一些清单文件而不是预编译列表中的 30 个文件来稍微优化您的资产。

    【讨论】:

    • 我可以在服务器上的共享文件夹中看到预编译的资产.. 那我为什么需要从本地复制资产?
    • 啊,对不起,我误读了您的原始帖子,以为您无法将其登录到服务器上。资产只是导致404吗?您可以根据 capistrano 中的文件尝试路径吗?这些文件是否具有公开的读取权限?
    • 这是资产文件'-rw-rw-r--'的权限,这是资产文件夹'drwxrwxr-x'的权限我在我的nginx默认文件服务器中有这个{听80; server_name 本地主机;根 /home/deploy/fullpower_tee/shared/public; .....
    • 是的,我得到 404 未找到资产文件,例如 website_url/stylesheets/bootstrap.css 加载资源失败:服务器响应状态为 404(未找到)
    • 我知道这是一个例子,但是您正在检查其中包含 md5 哈希的文件是否正确?以application-9158192b73777360795514768f5d195f.css 为例
    猜你喜欢
    • 2016-10-26
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-11-21
    • 1970-01-01
    相关资源
    最近更新 更多