Jam*_*ier 7 capistrano ruby-on-rails capistrano3 ruby-on-rails-5 rollbar
我刚刚将Rails应用程序更新为5.2,并将其配置为使用新config/credentials.yml.enc文件。
当我尝试部署时,出现以下错误:
NameError: uninitialized constant Rails
/Users/me/Documents/project/config/deploy.rb:27:in `<top (required)>'
Run Code Online (Sandbox Code Playgroud)
这指向我config/deploy.rb文件中的这一行:
set :rollbar_token, Rails.application.credentials[:rollbar_token]
Run Code Online (Sandbox Code Playgroud)
因此看来,在capistrano运行时,它无权访问Rails.application.credentials。
你们都如何处理?我有一些主意...
ENV变量
Rails.application.credentials
config/deploy.rb# config/deploy.rb
require File.expand_path("./environment", __dir__)
Run Code Online (Sandbox Code Playgroud)
这包括使常量像Rails.application在config/deploy/production.rb. 现在可能出现以下情况:
# config/deploy/staging.rb
server "production.lan", user: "production", roles: %w{app db web}
set :stage, :production
set :branch, "development"
set :pg_password, Rails.application.credentials[:staging][:postgres][:password]
Run Code Online (Sandbox Code Playgroud)
小智 6
我解决了这个问题如下:
set :rollbar_token, YAML.load(`rails credentials:show`)['rollbar_token']
Run Code Online (Sandbox Code Playgroud)
master.key将文件上传到服务器上(用户只读),如下所示:namespace :setup do
desc "setup: copy config/master.key to shared/config"
task :copy_linked_master_key do
on roles(fetch(:setup_roles)) do
sudo :mkdir, "-pv", shared_path
upload! "config/master.key", "#{shared_path}/config/master.key"
sudo :chmod, "600", "#{shared_path}/config/master.key"
end
end
before "deploy:symlink:linked_files", "setup:copy_linked_master_key"
end
Run Code Online (Sandbox Code Playgroud)
把它放在你的 lib/capistrano/tasks/setup.rake
在deploy.rb:
set :linked_files, fetch(:linked_files, []).push("config/master.key")
Run Code Online (Sandbox Code Playgroud)
确保你Capfile有线
# Load custom tasks from `lib/capistrano/tasks` if you have any defined
Dir.glob("lib/capistrano/tasks/*.rake").each { |r| import r }
Run Code Online (Sandbox Code Playgroud)
我解决这个问题的方法是$ROLLBAR_ACCESS_TOKEN在服务器上声明一个环境变量。我把它放在顶部,~deployer/.bashrc如下所示:
export ROLLBAR_ACCESS_TOKEN=...
Run Code Online (Sandbox Code Playgroud)
然后我通过定义此任务来与 Capistrano 集成:
task :set_rollbar_token do
on release_roles(:all).first do
set :rollbar_token, capture("echo $ROLLBAR_ACCESS_TOKEN").chomp
end
end
before "rollbar:deploy", "set_rollbar_token"
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
1452 次 |
| 最近记录: |