[英]How do I get the Rails application name within a rake task?
我正在嘗試編寫 Rails 3 rake
任務來生成config/initializers/secret_token.rb
。 我想提取應用程序的名稱,而不是在 rake 任務中對其進行硬編碼,但@app_name
尚未填充, ENV['APP_NAME']
也未填充。 這是任務的代碼:
desc "Regenerate the server secret"
task :generate_secret do
include ActiveSupport
File.open('config/initializers/secret_token.rb', 'w') do |f|
f.puts "#{@app_name}::Application.config.secret_token = '#{SecureRandom.hex(30)}'"
end
end
除了@app_name
為空之外,這一切都有效。 如何在此處檢索應用程序名稱?
您需要在 rake 任務中使用環境。 然后你可以使用Rails.application.class.parent_name
desc "Regenerate the server secret"
task :generate_secret => :environment do
include ActiveSupport
File.open('config/initializers/secret_token.rb', 'w') do |f|
f.puts "#{Rails.application.class.parent_name}::Application.config.secret_token = '#{SecureRandom.hex(30)}'"
end
end
當您執行“rails new your-app-name”時拼寫的 Rails 應用程序名稱
app_name = Rails.application.config.session_options[:key].sub(/^_/,'').sub(/_session/,'')
=> 'your-app-name'
這非常可靠,即使應用程序目錄在部署期間被重命名,您也不必猜測如何從 Class 名稱到“rails new”期間使用的正確拼寫。
使用這個,你可以這樣做:
class << Rails.application
def name
Rails.application.config.session_options[:key].sub(/^_/,'').sub(/_session/,'')
end
end
Rails.application.name
=> 'test-app'
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.