Capistrano:如何设置全局环境变量?

发布于 2024-12-11 08:39:24 字数 152 浏览 0 评论 0原文

我需要找到一种从 Capistrano 设置全局环境变量的方法。实际值是在运行时生成的,我无法在存储库中检查它并从那里加载。

该值必须作为 ENV['RAILS_ASSET_ID'] 加载到一个初始值设定项中。

我怎样才能这样做呢?

I need to find a way to set global env variable from Capistrano. Actual value is generated on in runtime, I can not check it in the repo and load from there.

This value must be loaded as ENV['RAILS_ASSET_ID'] in one initializer.

How can I do so?

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(4

空心空情空意 2024-12-18 08:39:24

您不能使用 default_environment capistrano 变量吗?
cf github/capistrano

对于例如,我们可以在生产中将它用于 rbenv :

set :default_environment, {
'PATH' => "$HOME/.rbenv/shims:$HOME/.rbenv/bin:$PATH"
}

Can't you use the default_environment capistrano variable ?
cf github/capistrano

For instance, we can use it for rbenv in production :

set :default_environment, {
'PATH' => "$HOME/.rbenv/shims:$HOME/.rbenv/bin:$PATH"
}
成熟的代价 2024-12-18 08:39:24

在初始化程序中指定它怎么样?

ENV['RAILS_ASSET_ID'] = 12345

How about just specifying it in your initializer?

ENV['RAILS_ASSET_ID'] = 12345
停滞 2024-12-18 08:39:24

如果全局变量是指在 Capistrano 中生成并随后在 Rails 中使用的内容,那么是的,您将必须创建某种文件。 Ruby 变量在运行之间不会持续存在。可以设置环境变量,但仅适用于子进程。

在部署期间在服务器上转储文件的一种方法就像您在那里所拥有的那样,只是远程:

run "echo #{asset_version} > #{release_path}/config/asset_version.conf"

您可以稍后像您所做的那样拾取并读取该值。

If by global variable you mean something that is generated in Capistrano and later used in Rails then yes, you will have to create some sort of file. Ruby variables do not persist between runs. Environment variables can be set but only apply to sub-processes.

One way to dump a file on the server during your deployment is like what you have there, only remote:

run "echo #{asset_version} > #{release_path}/config/asset_version.conf"

You can later pick up and read that value as you've done.

家住魔仙堡 2024-12-18 08:39:24

作为解决方法,到目前为止我正在使用此方法:

desc 'My custom task'
task :task_foo do
  asset_version = 12345
  system "echo #{asset_version} > RAILS_ASSET_ID"
end

并且它是在初始化程序中检索的:

File.open(Rails.root.join 'RAILS_ASSET_ID').read.strip]

但必须有更好的方法。有什么想法吗?

As a workaround, I'm using this method so far:

desc 'My custom task'
task :task_foo do
  asset_version = 12345
  system "echo #{asset_version} > RAILS_ASSET_ID"
end

and it is retrieved in intializer :

File.open(Rails.root.join 'RAILS_ASSET_ID').read.strip]

But there must be a better way. Any ideas?

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文