在资产预编译期间加载初始值设定项

时间:2014-03-05 02:05:04

标签: ruby-on-rails ruby ruby-on-rails-3.2

我正在尝试在部署到生产环境时预编译资产。我也尝试使用capistrano在服务器上首次安装它进行自动化。看起来在资产预编译过程中没有任何初始化程序被加载。

我正面临这两个问题

  1. 我第一次安装时会动态生成初始化文件(initializers / freshinstall.rb),内容如下

    config.assets.initialize_on_precompile = false

    以便预编译不检查尚不存在的数据库

  2. 我也有一些供应商文件,它们的位置在资产管道中设置,并放在单独的初始化文件初始化器/ vendor.rb

    MyApp :: Application.config.assets.paths<< “#Rails.root} / vendor / assets / images / xxxx”<< “#{Rails.root} / vendor / assets / images / xxxx / helpers” MyApp :: Application.config.assets.paths<< “#{} Rails.root /供应商/资产/样式表/ XXXX” MyApp :: Application.config.assets.paths<< “#{Rails.root} / vendor / assets / stylesheets / yyyy”<< “#{Rails.root} /供应商/资产/图像/ YYYY”

  3. 当capistrano运行资产预编译任务时,它无法找到供应商路径或阻止其查看数据库。这让我得出结论,初始化程序没有加载。经过一些stackoverflow问题。我甚至在config / application.rb

    中添加了一个铁路
    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
    

    但我仍然没有看到任何初始化程序被加载。我是否可以获得有关铁路应用程序启动过程内部的一些信息,以及在资产预编译过程中初始化程序未加载的原因。

    有些文件对理解这一点非常有帮助。关于railtie和初始化方法,Rails文档非常简单。 http://guides.rubyonrails.org/configuring.html

    提前谢谢

1 个答案:

答案 0 :(得分:0)

最后能够弄清楚如何去做。这适用于我的单服务器capistrano部署。以下是我的new_deploy到新服务器的capistrano任务。

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

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

config.assets.initialize_on_precompile = false  # no need of this in application.rb

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

before "deploy:assets:precompile" , "yourapp:create_database"

请参阅检查是否已设置全新安装标志,然后仅创建数据库。当您使用最新版本更新服务器时,也会在常规部署期间调用此方法。在那种情况下,fresh_install标志将为false。

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