簡體   English   中英

如何在 rake 任務中獲取 Rails 應用程序名稱?

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM