我正在尝试在部署到生产环境时预编译资产。我也尝试使用capistrano在服务器上首次安装它进行自动化。看起来在资产预编译过程中没有任何初始化程序被加载。
我正面临这两个问题
我第一次安装时会动态生成初始化文件(initializers / freshinstall.rb),内容如下
config.assets.initialize_on_precompile = false
以便预编译不检查尚不存在的数据库
我也有一些供应商文件,它们的位置在资产管道中设置,并放在单独的初始化文件初始化器/ 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”
当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
提前谢谢
答案 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