2014-03-05 49 views
0

我試圖在部署到生產環境時預編譯資產。我也嘗試使用capistrano在服務器上進行首次安裝時將其自動化。看起來在資產預編譯過程中沒有任何初始化器正在被加載。資產預編譯期間加載初始化程序

我面對這兩個問題

  1. 第一次安裝我生成對飛一個初始化文件(初始化/ freshinstall.rb)與以下內容

    config.assets。 initialize_on_precompile =假

    使預編譯不檢查不存在尚未

  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}/vendor/assets/stylesheets/xxxx「 MyApp :: Application.config.assets.paths < <」#{Rails.root}/vendor/assets/stylesheets/yyyy「< <」#{Rails.root}/vendor/assets/images/yyyy「

當capistrano運行資產預編譯任務時,它無法找到供應商路徑或停止查看數據庫。這使我得出結論,即初始化器沒有被加載。經歷了一些stackoverflow問題。我甚至添加了railtie 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 

但我仍然沒有看到任何初始化程序正在加載。我可以獲得有關軌道應用程序啓動過程的內部信息,以及爲什麼初始化程序在資產預先編譯過程中未加載的原因。

一些文件將有助於理解這一點。 Rails文檔對於railtie和初始化方法來說是非常小的。 http://guides.rubyonrails.org/configuring.html

預先感謝您

回答

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