我如何获取我的初始化文件以区分启动上下文和 rake 上下文?
How do I get my initialization file to distinguish between startup contexts and rake contexts?
我正在使用 Rails 5.1。我如何获取我的初始化文件(位于 config/my_init.rb)以识别它在服务器启动上下文中何时为 运行 以及在 rake 上下文中何时为 运行任务?我认为下面可以做到...
puts "iniitializing ... #{(!Rails.env.test?) } defined; #{!defined?(::Rake)}"
if(!Rails.env.test?) && !defined?(::Rake)
当我运行执行 rake 任务时,“!defined?(::Rake)”正确 returns false ...
localhost:myproject davea$ rake db:seed
iniitializing ... true defined; false
但是当我启动服务器时,该子句仍然返回 false
localhost:myproject davea$ rails s -b 127.0.0.1
=> Booting Puma
=> Rails 5.1.5 application starting in development
=> Run `rails server -h` for more startup options
iniitializing ... true defined; false
如何区分两者?
简短的解释是:
Rails core team decided to have consistency by enabling rails command to support everything that rake does.
通过运行宁rails --help
,在Rails5中,可以看到rails支持的所有命令,一长串选项。
您仍然可以选择使用 rake
到 运行 这些命令,就像您在 Rails 中所做的那样 4. 这是因为 Rails 社区引入了 Rake代理而不是将命令选项从 rake 完全移动到 rails.
在内部,通过 运行ning rails routes
,Rails 检查 routes
是否是 rails 原生支持的东西。在这种情况下,rails 本身不支持 routes
,因此 Rails 通过 Rake 代理将执行委托给 Rake。
编辑
您可以使用 File.extname
检查扩展名是否 .rake
# config/initializers/my_init.rb
Rails.application.config.after_initialize do
# tweak this as required...
if File.extname([=10=]) =='.rake'
#Doing some stuff
end
end
您可以检查 [=12=]
或 $PROGRAM_NAME
是别名
if $PROGRAM_NAME.end_with?("rake")
puts "I am running under rake"
elsif $PROGRAM_NAME.end_with?("rails")
puts "I am running under rails"
end
运行它
$ rake db:seed
I am running under rake
$ rails s -b 127.0.0.1
=> Booting Puma
=> Rails 5.2.0 application starting in development
=> Run `rails server -h` for more startup options
I am running under rails
[=11=]
保存当前 ruby 程序 运行。
所以这个检查应该适合你:
File.basename([=10=]) == 'rake'
$0 是 Ruby 中的全局定义变量 - Ruby Doc for Global Variables
Contains the name of the script being executed. May be assignable.
我正在使用 Rails 5.1。我如何获取我的初始化文件(位于 config/my_init.rb)以识别它在服务器启动上下文中何时为 运行 以及在 rake 上下文中何时为 运行任务?我认为下面可以做到...
puts "iniitializing ... #{(!Rails.env.test?) } defined; #{!defined?(::Rake)}"
if(!Rails.env.test?) && !defined?(::Rake)
当我运行执行 rake 任务时,“!defined?(::Rake)”正确 returns false ...
localhost:myproject davea$ rake db:seed
iniitializing ... true defined; false
但是当我启动服务器时,该子句仍然返回 false
localhost:myproject davea$ rails s -b 127.0.0.1
=> Booting Puma
=> Rails 5.1.5 application starting in development
=> Run `rails server -h` for more startup options
iniitializing ... true defined; false
如何区分两者?
简短的解释是:
Rails core team decided to have consistency by enabling rails command to support everything that rake does.
通过运行宁rails --help
,在Rails5中,可以看到rails支持的所有命令,一长串选项。
您仍然可以选择使用 rake
到 运行 这些命令,就像您在 Rails 中所做的那样 4. 这是因为 Rails 社区引入了 Rake代理而不是将命令选项从 rake 完全移动到 rails.
在内部,通过 运行ning rails routes
,Rails 检查 routes
是否是 rails 原生支持的东西。在这种情况下,rails 本身不支持 routes
,因此 Rails 通过 Rake 代理将执行委托给 Rake。
编辑
您可以使用 File.extname
检查扩展名是否.rake
# config/initializers/my_init.rb
Rails.application.config.after_initialize do
# tweak this as required...
if File.extname([=10=]) =='.rake'
#Doing some stuff
end
end
您可以检查 [=12=]
或 $PROGRAM_NAME
是别名
if $PROGRAM_NAME.end_with?("rake")
puts "I am running under rake"
elsif $PROGRAM_NAME.end_with?("rails")
puts "I am running under rails"
end
运行它
$ rake db:seed
I am running under rake
$ rails s -b 127.0.0.1
=> Booting Puma
=> Rails 5.2.0 application starting in development
=> Run `rails server -h` for more startup options
I am running under rails
[=11=]
保存当前 ruby 程序 运行。
所以这个检查应该适合你:
File.basename([=10=]) == 'rake'
$0 是 Ruby 中的全局定义变量 - Ruby Doc for Global Variables
Contains the name of the script being executed. May be assignable.