天道酬勤,学无止境

Set Multiple Environmental Variables On Invocation of Rake Task

I can invoke a Rake task and set a single environmental variable like this:

$ ONE=1 rake temp:both

But how do I set two environmental variables?

This doesn't work:

 $ ONE=1 TWO=2 rake temp:both 

This works, but is confusing to read:

$ ONE=1 rake temp:both TWO=2 

How can I pass more than one env before the call to rake?

评论

Agree with @Ernest; it should work. Here's a sample...

Sample rake task to echo vars:

task :echo_env do
  puts "VAR1: #{ENV['VAR1']}"
  puts "VAR2: #{ENV['VAR2']}"
end

Execute task:

VAR1=first VAR2=second bundle exec rake echo_env

Output:

VAR1: first
VAR2: second

受限制的 HTML

  • 允许的HTML标签:<a href hreflang> <em> <strong> <cite> <blockquote cite> <code> <ul type> <ol start type> <li> <dl> <dt> <dd> <h2 id> <h3 id> <h4 id> <h5 id> <h6 id>
  • 自动断行和分段。
  • 网页和电子邮件地址自动转换为链接。

相关推荐
  • 如何使用Ansible设置环境变量(How to set environmental variables using Ansible)
    问题 我需要设置JAVA_HOME之类的变量并更新PATH 。 有很多方法可以做到这一点。 一种方法是更新/etc/environment变量,并使用lineinfile模块在JAVA_HOME中添加一行,然后直接在来宾OS(本例中为CentOS)上运行命令源/etc/environment 。 另一种方法是执行导出命令,例如 export JAVA_HOME=/usr/java/jre1.8.0_51 export PATH=$PATH:$JAVA_HOME 因为所有这些都需要操作文件并直接在OS上运行命令以更新环境变量,是否有一种更清洁的方法来执行此操作? 回答1 是的,有一种更清洁的方法。 您可以为每个任务设置环境变量: tasks: - shell: echo JAVA_HOME is $JAVA_HOME environment: JAVA_HOME: /usr/java/jre1.8.0_51 register: shellout - debug: var=shellout 输出: TASK: [shell echo JAVA_HOME is $JAVA_HOME] ********************************** changed: [localhost] TASK: [debug var=shellout] ********************
  • capistrano 3 + rvm1-capistrano3 rails 4.1 secrets.yml 环境变量问题(capistrano 3 + rvm1-capistrano3 rails 4.1 secrets.yml environmental variables issue)
    问题 我一直在使用 capistrano 3 部署 rails 4.1 应用程序。它一直工作正常。 但是当我尝试做 rake 任务时(取消注释需要“capistrano/rails/assets”)。 我收到这个错误 cap aborted! SSHKit::Runner::ExecuteError: Exception while executing on host xxx.xxx.xxx.xxx: rake exit status: 1 rake stdout: Nothing written rake stderr: config.eager_load is set to nil. Please update your config/environments/*.rb files accordingly: * development - set it to false * test - set it to false (unless you use a tool that preloads your test environment) * production - set it to true rake aborted! ArgumentError: Missing required arguments: google_storage_access_key_id
  • capistrano 3 + rvm1-capistrano3 rails 4.1 secrets.yml environmental variables issue
    I have been deploying rails 4.1 application with capistrano 3. it has been working fine. but when i tried to do rake tasks (uncommenting require 'capistrano/rails/assets'). i get this error cap aborted! SSHKit::Runner::ExecuteError: Exception while executing on host xxx.xxx.xxx.xxx: rake exit status: 1 rake stdout: Nothing written rake stderr: config.eager_load is set to nil. Please update your config/environments/*.rb files accordingly: * development - set it to false * test - set it to false (unless you use a tool that preloads your test environment) * production - set it to true rake
  • 仅为 Rake 任务运行初始化程序(Run initializer only for Rake tasks)
    问题 我希望在执行 Rake 任务时运行某个初始化程序,而不是在运行 Rails 服务器时运行。 区分 Rake 调用和服务器调用的最佳方法是什么? 回答1 Rake 允许您为您的任务指定依赖项。 最好的推荐操作是将特定于 rake 的初始化放在它自己的任务中,而该任务又取决于“环境”任务。 例如: namespace :myapp do task :custom_environment => :environment do # special initialization stuff here # or call another initializer script end task :my_task => :custom_environment do # perform actions that need custom setup end end 如果你想创建一个特定于 rake 的初始化脚本目录,就像我们为 rails 所做的那样,我们只需在我们的:custom_environment任务中实现它。 task :custom_environment => :environment do Dir.glob("config/rake-initializers/*.rb").each do |initializer| require initializer end end
  • capistrano v3部署git存储库及其子模块(capistrano v3 deploy git repository and its submodules)
    问题 对于capistrano v2,可以使用以下选项将子模块包括在部署中: set :git_enable_submodules, 1 在v3中,这似乎不起作用。 是否仍然支持此选项,还是有实现相同目标的新方法? 回答1 如您在Capistrano源代码中所见,https://github.com/capistrano/capistrano/blob/master/lib/capistrano/tasks/git.rake#L34和https://github.com/capistrano/capistrano/blob /master/lib/capistrano/tasks/git.rake#L56它使用git archive将代码检出到发行目录中。 该代码在此处复制: desc 'Clone the repo to the cache' task clone: :'git:wrapper' do on roles :all do if test " [ -f #{repo_path}/HEAD ] " info t(:mirror_exists, at: repo_path) else within deploy_path do with git_environmental_variables do execute :git, :clone, '--mirror'
  • 在engineyard中设置环境变量(Setting environment variables in engineyard)
    问题 我从 heroku 知道可以通过在本地运行heroku config:add MY_ENV_VAR=123来添加环境变量。 我怎样才能用engineyard实现同样的事情? 回答1 我们遇到了同样的问题,并向 EngineYard 寻求帮助。 来自安永的 Jim Neath 回复如下: 不幸的是,乘客没有从系统中获得传递的环境变量。 您需要做的是创建一个 ruby​​ 包装器来定义您的环境变量并使用它启动乘客,如下所述: http://blog.phusion.nl/2008/12/16/passing-environment-variables-to-ruby-from-phusion-passenger/ 我为您创建了一个基本的自定义厨师食谱,可以做到这一点: https://github.com/jimneath/ey-cloud-recipes/tree/master/cookbooks/passenger_env_vars 您需要使用环境变量更新以下文件: /ey-cloud-recipes/blob/master/cookbooks/passenger_env_vars/templates/default/env.custom.erb 回答2 我不认为你可以=/。 我们在 Rails 应用程序中使用的一种解决方法是通过 ssh (ey ssh) 连接到
  • 如何在 Cloud9 上使用 Rails Composer 和 postgreSQL 并在 Heroku 上部署(How to use Rails Composer and postgreSQL on Cloud9 and deploy on Heroku)
    问题 使用 Rails Composer 在 Cloud9 上使用 postgreSQL 创建 Rails 应用程序并在 Heroku 上部署的过程充满了警告和错误,可能会让新开发人员感到困惑。 是否有任何说明可以帮助我完成整个过程并部署我的入门应用程序? 回答1 我相信 rails composer、cloud9 和 heroku 以及后者推荐的 postgreSQL 数据库,尽管将它们一起使用有很多小细节,没有人澄清如何绕过。 在花了很多个晚上解决之后,我创建了以下说明列表,这些说明在发布日期和时间有效。 在 cloud9 上创建一个新的工作区在您的工作区中设置 postgreSQL 数据库: $ sudo 服务 postgresql 启动 $ sudo sudo -u postgres psql postgres=# CREATE USER username SUPERUSER PASSWORD 'password'; 创建角色 postgres=# \q 选择一个在 heroku 上可用的应用程序的名称,因为它要么是你拥有的,要么是在 heroku 上仍然可用的。 您可以通过访问 [潜在域名].herokuapp.com 查看可用性 $ mkdir ["your app's directory/domain name"] $ cd ["your app's
  • PowerShell 的 setlocal / endlocal 等价物是什么?(What is the setlocal / endlocal equivalent for PowerShell?)
    问题 客观的 将环境变量更改隔离到代码块。 背景 如果我想创建一个批处理脚本来运行需要设置环境变量的命令,我知道我可以这样做: setlocal set MYLANG=EN my-cmd dostuff -o out.csv endlocal 但是,当我需要使用 shell 脚本语言时,我倾向于使用 PowerShell。 我知道如何设置环境变量( $env:TEST="EN" ),当然这只是一个简单的例子。 但是,我不确定如何实现与批处理脚本相同的效果。 令人惊讶的是,我也没有看到任何问题问这个。 我知道使用$env:TEST="EN"设置某些内容是进程范围的,但是如果我在单个终端会话中将脚本用作小型实用程序,那这是不切实际的。 我目前的做法: 输入setlocal 。 但这不是一个commandlet...我希望。 将当前变量保存到临时变量,运行我的命令,将其改回来......有点傻。 函数级范围(虽然我怀疑成功,因为$env:似乎与$global:没有太大区别) 函数作用域不胜过对$env:的引用$env: $env:TEST="EN" function tt { $env:TEST="GB" ($env:TEST) } ($env:TEST) tt ($env:TEST) 输出: C:\Users\me> .\eg.ps1 EN GB GB 回答1 在批处理文件
  • 如何在Rails环境中将参数传递给Rake任务? [复制](How to pass arguments into a Rake task with environment in Rails? [duplicate])
    问题 这个问题已经在这里有了答案: 如何将命令行参数传递给rake任务(19个答案) 3年前关闭。 我可以按以下方式传递参数: desc "Testing args" task: :hello, :user, :message do |t, args| args.with_defaults(:message => "Thanks for logging on") puts "Hello #{args[:user]}. #{:message}" end 我还能够为Rails应用程序加载当前环境 desc "Testing environment" task: :hello => :environment do puts "Hello #{User.first.name}." end 我想做的是能够拥有变量和环境 desc "Testing environment and variables" task: :hello => :environment, :message do |t, args| args.with_defaults(:message => "Thanks for logging on") puts "Hello #{User.first.name}. #{:message}" end 但这不是有效的任务调用。 有谁知道我怎么能做到这一点? 回答1 TLDR; task
  • 盒马中后台跨端方案探索
    随着云计算和无线网络等基础设施的成熟,移动设备呈现爆发式增长,越来越多的企业级产品开始拥抱多平台设计,移动化办公概念已深入人心。华为发布了基于微内核的全场景分布式 OS -- 鸿蒙,期望打造以人为核心,万物互联的流畅体验,让用户在不同的场景设备中自如切换。苹果早在 iOS 8 上便发布了 Hand-Off 功能,支持用户在任意的苹果设备间实现跨设备的任务协同和无缝体验。SaaS 软件巨头 SAP 也早已在其全线的 SaaS 产品中提供了跨平台和移动办公的支持,用户不再受限于传统的办公室场景,而是可以实现任意时间和任意地点的便捷工作。盒马中后台体验边界的延展同样,在实体零售数字化的大背景下,盒马尝试对人货场进行全新的数字化重构。在消费者端,为用户提供精准的人货匹配与全新的消费体验;在作业者端,通过构建全新的数字化流程,为用户提供简单高效一致的作业体验。在这种新型的数字化关系下,作业形态和作业场景更加多元化,不再受制于特定的时间与地点,作业者可以借助多类型的智能设备来完成作业任务。因此,对于盒马体验技术团队而言,我们需要重新思考和定义中后台的体验边界。图:盒马门店智能设备网络在盒马,不同于传统的中后台场景,场的载体更加多样化,不只是传统的办公室场景,还包括门店,仓库,配送站,甚至是移动中的卡车与电瓶车;这其中的作业者角色也更为多元化,例如总部管理职能部门,门店经营职能部门,仓储作业部门
  • 如何将命令行参数传递给rake任务(How to pass command line arguments to a rake task)
    问题 我有一个rake任务,需要在多个数据库中插入一个值。 我想将此值从命令行或另一个rake任务传递到rake任务中。 我怎样才能做到这一点? 回答1 选项和依赖项必须在数组内部: namespace :thing do desc "it does a thing" task :work, [:option, :foo, :bar] do |task, args| puts "work", args end task :another, [:option, :foo, :bar] do |task, args| puts "another #{args}" Rake::Task["thing:work"].invoke(args[:option], args[:foo], args[:bar]) # or splat the args # Rake::Task["thing:work"].invoke(*args) end end 然后 rake thing:work[1,2,3] => work: {:option=>"1", :foo=>"2", :bar=>"3"} rake thing:another[1,2,3] => another {:option=>"1", :foo=>"2", :bar=>"3"} => work: {:option=>"1", :foo=>
  • 在 Rake 任务中使用环境变量(Use environment variables in Rake task)
    问题 task :some_task, :environment do |t, args| puts Rails.env #=> development, production, etc puts ENV #=> {} end 我设置了一些环境变量(通过本地 .env,或通过 Herokusan 通过 Heroku Config),例如使用哪个 AWS 存储桶,我想在 rake 任务中引用它们,但 ENV 是一个空哈希。 我知道由于:environment任务依赖性和Rails.env有一个值,所以与:environment相关的Rails.env已经完成,但我不清楚细节。 那么,如何在 Rake 任务中使用ENV ? 回答1 两种好方法: 使用 Heroku 的“工头”工具。 将所有环境变量放入.env : VAR=value 并运行foreman run rake some_task 。 或者(而且,我推荐这种方式),使用“Figaro” gem。 将你的变量放入config/application.yml : VAR: value 就是这样; rake some_task 。 我推荐后者,如果只是因为rake figaro:heroku会按照application.yml指定的方式将您的 env 推高
  • Use environment variables in Rake task
    task :some_task, :environment do |t, args| puts Rails.env #=> development, production, etc puts ENV #=> {} end I set some environment variables (either via a local .env, or via Heroku Config via Herokusan), such as which AWS bucket to use, and I want to reference them in the rake task, but ENV is an empty hash. I know something related to environment gets done because of the :environment task dependency and that Rails.env has a value, but I'm not clear on the details. So, how can I use ENV in a Rake task?
  • 如何将对象从 rake 任务传递给 rabl 视图(How can I pass an object to rabl views from rake task)
    问题 我正在尝试使用 rabl 从 rake 任务创建一个 json 文件。 下面我有要测试的简化版本。 当我通过 url 查看 'articles.json' 或 'articles/2.json' 时,我得到了预期的 json 响应。 但是当我尝试通过 rake 任务运行它时,它在创建的 jsonFile 中始终为 @articles 提供空值。 它将呈现 index.json.rabl 视图与@articles.count 相同的次数,但值始终为空。 那么如何将在我的 rake 任务中创建的 @articles 对象传递给 Rabl.render? 索引.json.rabl @feedName ||= 'default' node(:rss) { partial('articles/rss), :object => @feedName } node(:headlines) { partial('articles/show'), :object => @articles } show.json.rabl object @article attributes :id,:body .... export.rake task :breakingnews => :config do filename = 'breakingnews.json' jsonFile = File.new
  • 如何在 AWS Lambda 上使用环境变量?(How can I use environmental variables on AWS Lambda?)
    问题 我正在编写一个应用程序,我想将它作为 AWS Lambda 函数运行,但也遵守十二因素应用程序指南。 特别是第三部分。 Config 需要使用环境变量进行配置。 但是,我找不到为 AWS Lambda 实例设置环境变量的方法。 任何人都可以指出我正确的方向吗? 如果无法使用环境变量,请您推荐一种使用环境变量进行本地开发的方法,并将它们转换为可以使用 AWS 中的应用程序代码访问的有效配置系统。 谢谢。 回答1 截至 2016 年 11 月 18 日,AWS Lambda 支持环境变量。 可以使用 AWS 控制台和 AWS CLI 指定环境变量。 这是您使用 AWS CLI 创建带有LD_LIBRARY_PATH环境变量的 Lambda 的方式: aws lambda create-function \ --region us-east-1 --function-name myTestFunction --zip-file fileb://path/package.zip --role role-arn --environment Variables={LD_LIBRARY_PATH=/usr/bin/test/lib64} --handler index.handler --runtime nodejs4.3 --profile default 回答2 也许 node
  • Rails App "Permission Denied" error when installing refinerycms
    While trying to install refinery, a rails app, I keep getting the following error: ESL@new-host-2 ~$ refinerycms /Application/MAMP/htdocs/goodwatching create /usr/local/rvm/rubies/ruby-1.9.3-p194/lib/ruby/1.9.1/fileutils.rb:247:in `mkdir': Permission denied - /Application (Errno::EACCES) from /usr/local/rvm/rubies/ruby-1.9.3-p194/lib/ruby/1.9.1/fileutils.rb:247:in `fu_mkdir' from /usr/local/rvm/rubies/ruby-1.9.3-p194/lib/ruby/1.9.1/fileutils.rb:221:in `block (2 levels) in mkdir_p' from /usr/local/rvm/rubies/ruby-1.9.3-p194/lib/ruby/1.9.1/fileutils.rb:219:in `reverse_each' from /usr/local/rvm
  • Gitlab-02-Gitlab-数据备份
    备份和恢复 GitLab GitLab提供用于备份和恢复GitLab实例的Rake任务。 应用程序数据备份将创建一个包含数据库、所有存储库和所有附件的存档文件。 您只能将备份还原到创建它的GitLab的完全相同的版本和类型(CE/EE)。将存储库从一台服务器迁移到另一台服务器的最佳方法是通过备份还原。 GitLab不会备份未存储在文件系统中的项目。如果您使用的是对象存储,请确保在需要时使用对象存储提供程序启用备份。 必须的条件 为了能够备份和恢复,请确保系统上安装了Rsync。如果安装了GitLab: 使用综合包,应该会含有此软件。 使用源码安装,则您需要确定是否安装了rsync。例如: # Debian/Ubuntu sudo apt-get install rsync # RHEL/CentOS sudo yum install rsync 备份时间戳 备份存档保存在“backup\u path”中,该路径在“config/gitlab.yml”文件中指定。文件名是“[TIMESTAMP]\u gitlab\u backup.tar”,其中“TIMESTAMP”标识创建每个备份的时间,以及gitlab版本。如果需要恢复GitLab并且有多个备份可用,则需要时间戳。 For example, if the backup name is 1493107454_2018_04_25
  • 如何判断 Rails 代码是通过 rake 还是脚本/生成运行?(How can I tell if Rails code is being run via rake or script/generate?)
    问题 我有一个重量级的插件。 (Bullet,配置了 Growl 通知。)如果我只是运行 rake 任务或生成器,我不想启用它,因为它在这些情况下没有用。 有没有办法判断是否是这种情况? 回答1 就这么简单: if $rails_rake_task puts 'Guess what, I`m running from Rake' else puts 'No; this is not a Rake task' end 导轨 4+ 而不是$rails_rake_task ,使用: File.basename($0) == 'rake' 回答2 我更喜欢 NickMervin 的回答,因为它不依赖于 Rake 的内部实现(例如 Rake 的全局变量)。 这更好 - 不需要正则表达式 File.split($0).last == 'rake' File.split() 是需要的,因为有人可以用它的完整路径开始rake ,例如: /usr/local/bin/rake taskname 回答3 $0保存当前正在运行的 ruby​​ 程序,所以这应该可以工作: $0 =~ /rake$/ 回答4 似乎运行rake将定义一个全局变量 $rakefile,但在我的情况下它被设置为nil ; 所以你最好只检查$rakefile是否已定义......看到__FILE__和
  • How to integrate previously external ruby scripts into a Rails app and call them from a rake task?
    I have some additional scripts that I've written outside of my Rails 3.1.x app, however the time has come to pull data from the database of the Rails app directly rather than utilizing some exports of the data. To this end, I'd like to integrate the scripts into my rails app. Hitherto I've run rake tasks based on methods in the models such as having this in my lib/taks/app.rake: desc "Does something." task :do_some_things => :environment do ModelName.some_method ModelName.another_method end If I were to place my scripts essentially into lib, would I be able to call these from a rake task? Or
  • Ansible:迭代并包含多个变量文件(Ansible: Iterate and include multiple variable files)
    问题 我有数百个文件(通过某些应用程序生成),我正在尝试对其进行迭代并将它们包含为变量文件。 请参阅以下文件作为示例。 每个文件中有更多的变量,我已经淡化了以使示例清晰。 # cat /tmp/abc/dev1.yml --- app_name: dev1 instance: dev port: 1234 server: test1 # # cat /tmp/abc/dev2.yml --- app_name: dev2 instance: dev port: 4567 server: test2 # # cat /tmp/abc/dev3.yml --- app_name: dev3 instance: dev port: 2223 server: test3 # 现在,当我在我的剧本中使用这些任务时,我可以在输出的文件 ( /tmp/abc/*.yml ) 中看到定义为 ansible_facts 的变量(app_name、实例、端口等)。 - action: shell echo "{{ item }}" with_fileglob: /tmp/abc/* register: res - include_vars: "{{ item.item }}" with_items: res.results when: item.changed == True register