首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在资产预编译期间加载初始化器

在资产预编译期间加载初始化器
EN

Stack Overflow用户
提问于 2014-03-05 02:05:03
回答 1查看 1.1K关注 0票数 0

我试图在部署到生产环境时预编译资产。我还试图第一次使用capistrano在服务器上自动安装它。在资产预编译过程中,似乎没有一个初始化程序被加载。

我正面临着这两个问题

  1. 这是第一次安装,我正在动态生成一个初始化文件(initializers/newinstall.rb),内容如下 config.assets.initialize_on_precompile = false 所以预编译不检查还不存在的数据库
  2. 我也有一些供应商文件,它们的位置是在资产管道中设置的,并且放在单独的初始化文件初始化器/vendor.rb中。 {Rails.root}/vendor/assets/images/xxxx/helpers“<<”#Rails.root}/供应商/资产/图像/xxxx“<< # MyApp::Application.config.assets.paths << MyApp::Application.config.assets.paths << "#{Rails.root}/vendor/assets/stylesheets/yyyy”<< "# {Rails.root}/供应商/资产/图像/yyyy“

当capistrano运行资产预编译任务时,它无法找到供应商路径或阻止它查看数据库。这使我得出一个结论,即初始化器没有加载。在经历了一些堆叠溢出的问题之后。我甚至在config/application.rb . to中添加了一个railtie

代码语言:javascript
复制
module AssetsInitializers
  class Railtie < Rails::Railtie
    initializer "assets_initializers.initialize_rails",
                :group => :assets do |app|
      require "#{Rails.root}/config/initializers/freshinstall.rb"
      require "#{Rails.root}/config/initializers/vendor.rb"
    end
  end
end

但我还是没看到任何初始化程序被加载。我能得到一些关于rail应用程序的启动进程内部的信息,以及为什么在资产预编译过程中初始化器没有被加载。

有些文档对理解这一点很有帮助。对于railtie和初始化器方法,Rails文档是非常最少的。http://guides.rubyonrails.org/configuring.html

提前谢谢你

EN

回答 1

Stack Overflow用户

发布于 2014-03-25 03:42:04

终于想出了该怎么做。这适用于我的单个服务器capistrano部署。下面是我的new_deploy在一个新服务器上的capistrano任务。

代码语言:javascript
复制
set :fresh_install, false
task :new_deploy do
    set :fresh_install,true
    deploy.setup
    #The assets:precompile process is part of the deploy.update. Before the precompile process, we will create database.
    deploy.update
    deploy.migrate
    run_seed
    #load unicorn server
  end

不要做下面提到的任何配置设置

代码语言:javascript
复制
config.assets.initialize_on_precompile = false  # no need of this in application.rb

而不是在资产之前:预编译创建数据库

代码语言:javascript
复制
before "deploy:assets:precompile" , "yourapp:create_database"

请检查是否设置了新安装标志,然后在使用最新版本更新服务器时,只会在常规部署期间调用create方法。在这种情况下,fresh_install标志将是假的。

代码语言:javascript
复制
desc 'Create a new database'
  task :create_database, :roles => :app do
     if fresh_install 
        run "cd #{release_path}; bundle exec rake db:create RAILS_ENV=#{rails_env}"
      end
  end
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/22187060

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档