Mat*_*ler 3 ruby-on-rails ruby-on-rails-3
我正在尝试编写一个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
Run Code Online (Sandbox Code Playgroud)
这一切都有效,除了@app_name空白.如何在此处检索应用程序名称?
joh*_*ley 15
您需要在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
Run Code Online (Sandbox Code Playgroud)
Rails 应用程序的名称,就像您执行“rails new your-app-name”时拼写的那样
app_name = Rails.application.config.session_options[:key].sub(/^_/,'').sub(/_session/,'')
=> 'your-app-name'
Run Code Online (Sandbox Code Playgroud)
这非常可靠,即使应用程序目录在部署期间被重命名,并且您不必猜测如何从类名称获取在“rails new”期间使用的正确拼写。
使用这个,你可以这样做:
class << Rails.application
def name
Rails.application.config.session_options[:key].sub(/^_/,'').sub(/_session/,'')
end
end
Rails.application.name
=> 'test-app'
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
5066 次 |
| 最近记录: |