Vagrant Puppet设置未能找到课程(Vagrant Puppet set up failing to find class)
今天是个好日子,
我正在给流浪者一个镜头并将其与木偶配对,看看我是否可以开始一个虚拟项目。 我正在使用配置脚本在ubuntu框中安装必要的组件我正在使用vagrant up命令; 然而,当木偶供应时,它只是失败了,我不知道为什么,因为我刚开始玩它。 我的目录结构如下:
Project |--puppet |--manifests |--site.pp |--modules(empty) |--Puppetfile |--provision scripts |--Vagrantfile
我的配置脚本运行以下命令
$as_vagrant = 'sudo -u vagrant -H bash -l -c' ${as_vagrant} apt-get update ${as_vagrant} gpg --keyserver hkp://keys.gnupg.net --recv-keys D39DC0E3 ${as_vagrant} apt-get install curl -y ${as_vagrant} curl -sSL https://get.rvm.io | bash -s $1 rvm install 2.1.4 rvm use 2.1.4 --default ${as_vagrant} apt-get install -y puppet ${as_vagrant} gem install librarian-puppet -v 2.0.0 sudo apt-get install git -y sudo touch /home/vagrant/metadata.json sudo echo '{}' >> /home/vagrant/metadata.json
(我只是将所有命令放在一个块中,而不是将它们分成单独的文件以保持这个简短)
我的Puppetfile看起来像这样:
#!/usr/bin/env ruby #^syntax detection forge "https://forgeapi.puppetlabs.com" # use dependencies defined in metadata.json #metadata # use dependencies defined in Modulefile # modulefile # Java module mod 'tylerwalts/jdk_oracle' # A module from the Puppet Forge mod 'puppetlabs-stdlib' # A module from git mod 'puppetlabs-ntp', :git => 'git://github.com/puppetlabs/puppetlabs-ntp.git' # A module from a git branch/tag mod 'puppetlabs-apt', :git => 'https://github.com/puppetlabs/puppetlabs-apt.git', :ref => '1.4.x' # A module from Github pre-packaged tarball # mod 'puppetlabs-apache', '0.6.0', :github_tarball => 'puppetlabs/puppetlabs-apache'
我运行配置脚本的vagrantfile部分如下所示:
##### Puppet management section config.vm.provision :shell, :path => "install-rvm.sh", :args => "stable" config.vm.provision :shell, :path => "install-ruby.sh", :args => "2.1.4" config.vm.provision :shell, :path => "install-puppetstuff.sh" config.vm.provision :shell, :path => "install-defaults.sh" #Provisioning puppet config.vm.provision :puppet do |puppet| puppet.manifests_path = 'puppet/manifests' puppet.module_path = ['puppet/modules'] puppet.manifest_file = 'site.pp' end #Setting up librarian puppet for puppet modules config.vm.provision :shell, :path => "librarian-puppet-init.sh"
最后,librarian-puppet-init.sh脚本如下所示:
#!/usr/bin/env bash librarian-puppet install
site.pp文件:
class { 'jdk_oracle': versrion => '7' }
现在,考虑到我没有错过任何东西,这是我目前的“设置”,当我做流浪汉时,一切运行良好,直到流浪汉运行我的librarian-puppet-init脚本。 当它执行它时,整个事情崩溃并且它吐出来
==> default: Puppet::Parser::AST::Resource failed with error ArgumentError: Could not find declared class jdk_oracle at /tmp/vagrant-puppet-3/manifests/site.pp:3 on node chard The following SSH command responded with a non-zero exit status. Vagrant assumes that this means the command failed! puppet apply --modulepath '/tmp/vagrant-puppet-3/modules-0:/etc/puppet/modules' --manifestdir /tmp/vagrant-puppet-3/manifests --detailed-exitcodes /tmp/vagrant-puppet-3/manifests/site.pp Stdout from the command: warning: Could not retrieve fact fqdn Stderr from the command: stdin: is not a tty Puppet::Parser::AST::Resource failed with error ArgumentError: Could not find declared class jdk_oracle at /tmp/vagrant-puppet-3/manifests/site.pp:3 on node chard
但是,如果我在site.pp文件中没有包含任何内容而是将其留空,我会得到此输出(其他所有内容保持不变)
==> default: Running provisioner: shell... default: Running: /var/folders/jp/b91ydrmx1dx8kmvr0jvc78tw0000gn/T/vagrant-shell20141107-3334-likxg7.sh ==> default: stdin: is not a tty ==> default: /usr/local/rvm/gems/ruby-2.1.4/gems/librarian-puppet-2.0.0/lib/librarian/puppet/dsl.rb:74:in `metadata' ==> default: : ==> default: undefined method `each' for nil:NilClass ==> default: ( ==> default: NoMethodError ==> default: ) ==> default: from /usr/local/rvm/gems/ruby-2.1.4/gems/librarian-puppet-2.0.0/lib/librarian/puppet/dsl.rb:24:in `block in run' ==> default: from /usr/local/rvm/gems/ruby-2.1.4/gems/librarian-0.1.2/lib/librarian/dsl/receiver.rb:34:in `instance_eval' ==> default: from /usr/local/rvm/gems/ruby-2.1.4/gems/librarian-0.1.2/lib/librarian/dsl/receiver.rb:34:in `run' ==> default: from /usr/local/rvm/gems/ruby-2.1.4/gems/librarian-puppet-2.0.0/lib/librarian/puppet/dsl.rb:47:in `run' ==> default: from /usr/local/rvm/gems/ruby-2.1.4/gems/librarian-puppet-2.0.0/lib/librarian/puppet/dsl.rb:34:in `block in run' ==> default: from /usr/local/rvm/gems/ruby-2.1.4/gems/librarian-puppet-2.0.0/lib/librarian/puppet/dsl.rb:28:in `tap' ==> default: from /usr/local/rvm/gems/ruby-2.1.4/gems/librarian-puppet-2.0.0/lib/librarian/puppet/dsl.rb:28:in `run' ==> default: from /usr/local/rvm/gems/ruby-2.1.4/gems/librarian-0.1.2/lib/librarian/dsl.rb:17:in `run' ==> default: from /usr/local/rvm/gems/ruby-2.1.4/gems/librarian-0.1.2/lib/librarian/environment.rb:148:in `dsl' ==> default: from /usr/local/rvm/gems/ruby-2.1.4/gems/librarian-0.1.2/lib/librarian/specfile.rb:15:in `read' ==> default: from /usr/local/rvm/gems/ruby-2.1.4/gems/librarian-0.1.2/lib/librarian/action/resolve.rb:13:in `run' ==> default: from /usr/local/rvm/gems/ruby-2.1.4/gems/librarian-0.1.2/lib/librarian/cli.rb:169:in `resolve!' ==> default: from /usr/local/rvm/gems/ruby-2.1.4/gems/librarian-puppet-2.0.0/lib/librarian/puppet/cli.rb:67:in `install' ==> default: from /usr/local/rvm/gems/ruby-2.1.4/gems/thor-0.19.1/lib/thor/command.rb:27:in `run' ==> default: from /usr/local/rvm/gems/ruby-2.1.4/gems/thor-0.19.1/lib/thor/invocation.rb:126:in `invoke_command' ==> default: from /usr/local/rvm/gems/ruby-2.1.4/gems/thor-0.19.1/lib/thor.rb:359:in `dispatch' ==> default: from /usr/local/rvm/gems/ruby-2.1.4/gems/thor-0.19.1/lib/thor/base.rb:440:in `start' ==> default: from /usr/local/rvm/gems/ruby-2.1.4/gems/librarian-0.1.2/lib/librarian/cli.rb:26:in `block (2 levels) in bin!' ==> default: from /usr/local/rvm/gems/ruby-2.1.4/gems/librarian-0.1.2/lib/librarian/cli.rb:31:in `returning_status' ==> default: from /usr/local/rvm/gems/ruby-2.1.4/gems/librarian-0.1.2/lib/librarian/cli.rb:26:in `block in bin!' ==> default: from /usr/local/rvm/gems/ruby-2.1.4/gems/librarian-0.1.2/lib/librarian/cli.rb:47:in `with_environment' ==> default: from /usr/local/rvm/gems/ruby-2.1.4/gems/librarian-0.1.2/lib/librarian/cli.rb:26:in `bin!' ==> default: from /usr/local/rvm/gems/ruby-2.1.4/gems/librarian-puppet-2.0.0/bin/librarian-puppet:7:in `<top (required)>' ==> default: from /usr/local/rvm/gems/ruby-2.1.4/bin/librarian-puppet:23:in `load' ==> default: from /usr/local/rvm/gems/ruby-2.1.4/bin/librarian-puppet:23:in `<main>' ==> default: from /usr/local/rvm/gems/ruby-2.1.4/bin/ruby_executable_hooks:15:in `eval' ==> default: from /usr/local/rvm/gems/ruby-2.1.4/bin/ruby_executable_hooks:15:in `<main>' The following SSH command responded with a non-zero exit status. Vagrant assumes that this means the command failed! chmod +x /tmp/vagrant-shell && /tmp/vagrant-shell Stdout from the command: Stderr from the command: stdin: is not a tty /usr/local/rvm/gems/ruby-2.1.4/gems/librarian-puppet-2.0.0/lib/librarian/puppet/dsl.rb:74:in `metadata': undefined method `each' for nil:NilClass (NoMethodError) from /usr/local/rvm/gems/ruby-2.1.4/gems/librarian-puppet-2.0.0/lib/librarian/puppet/dsl.rb:24:in `block in run' from /usr/local/rvm/gems/ruby-2.1.4/gems/librarian-0.1.2/lib/librarian/dsl/receiver.rb:34:in `instance_eval' from /usr/local/rvm/gems/ruby-2.1.4/gems/librarian-0.1.2/lib/librarian/dsl/receiver.rb:34:in `run' from /usr/local/rvm/gems/ruby-2.1.4/gems/librarian-puppet-2.0.0/lib/librarian/puppet/dsl.rb:47:in `run' from /usr/local/rvm/gems/ruby-2.1.4/gems/librarian-puppet-2.0.0/lib/librarian/puppet/dsl.rb:34:in `block in run' from /usr/local/rvm/gems/ruby-2.1.4/gems/librarian-puppet-2.0.0/lib/librarian/puppet/dsl.rb:28:in `tap' from /usr/local/rvm/gems/ruby-2.1.4/gems/librarian-puppet-2.0.0/lib/librarian/puppet/dsl.rb:28:in `run' from /usr/local/rvm/gems/ruby-2.1.4/gems/librarian-0.1.2/lib/librarian/dsl.rb:17:in `run' from /usr/local/rvm/gems/ruby-2.1.4/gems/librarian-0.1.2/lib/librarian/environment.rb:148:in `dsl' from /usr/local/rvm/gems/ruby-2.1.4/gems/librarian-0.1.2/lib/librarian/specfile.rb:15:in `read' from /usr/local/rvm/gems/ruby-2.1.4/gems/librarian-0.1.2/lib/librarian/action/resolve.rb:13:in `run' from /usr/local/rvm/gems/ruby-2.1.4/gems/librarian-0.1.2/lib/librarian/cli.rb:169:in `resolve!' from /usr/local/rvm/gems/ruby-2.1.4/gems/librarian-puppet-2.0.0/lib/librarian/puppet/cli.rb:67:in `install' from /usr/local/rvm/gems/ruby-2.1.4/gems/thor-0.19.1/lib/thor/command.rb:27:in `run' from /usr/local/rvm/gems/ruby-2.1.4/gems/thor-0.19.1/lib/thor/invocation.rb:126:in `invoke_command' from /usr/local/rvm/gems/ruby-2.1.4/gems/thor-0.19.1/lib/thor.rb:359:in `dispatch' from /usr/local/rvm/gems/ruby-2.1.4/gems/thor-0.19.1/lib/thor/base.rb:440:in `start' from /usr/local/rvm/gems/ruby-2.1.4/gems/librarian-0.1.2/lib/librarian/cli.rb:26:in `block (2 levels) in bin!' from /usr/local/rvm/gems/ruby-2.1.4/gems/librarian-0.1.2/lib/librarian/cli.rb:31:in `returning_status' from /usr/local/rvm/gems/ruby-2.1.4/gems/librarian-0.1.2/lib/librarian/cli.rb:26:in `block in bin!' from /usr/local/rvm/gems/ruby-2.1.4/gems/librarian-0.1.2/lib/librarian/cli.rb:47:in `with_environment' from /usr/local/rvm/gems/ruby-2.1.4/gems/librarian-0.1.2/lib/librarian/cli.rb:26:in `bin!' from /usr/local/rvm/gems/ruby-2.1.4/gems/librarian-puppet-2.0.0/bin/librarian-puppet:7:in `<top (required)>' from /usr/local/rvm/gems/ruby-2.1.4/bin/librarian-puppet:23:in `load' from /usr/local/rvm/gems/ruby-2.1.4/bin/librarian-puppet:23:in `<main>' from /usr/local/rvm/gems/ruby-2.1.4/bin/ruby_executable_hooks:15:in `eval' from /usr/local/rvm/gems/ruby-2.1.4/bin/ruby_executable_hooks:15:in `<main>'
任何人都知道发生了什么事吗? 我花了好几天时间试图弄清楚什么是错的,并且无数个小时试图在谷歌上找到一些能够清楚地解释事情的东西,以便我有一个干净的清洁设置,没有成功。 欢迎任何和所有帮助。 谢谢大家。
*****编辑******
在配置puppet的命令之前,我已经为librarian puppet移动了我的配置命令,所以我的vagrant文件现在看起来像这样,并且我添加了一个sync命令:
##### Puppet management section config.vm.provision :shell, :path => "install-rvm.sh", :args => "stable" config.vm.provision :shell, :path => "install-ruby.sh", :args => "2.1.4" config.vm.provision :shell, :path => "install-puppetstuff.sh" config.vm.provision :shell, :path => "install-defaults.sh" #Seting up librrian puppet for puppet modules config.vm.provision :shell, :path => "librarian-puppet-init.sh" #Provisioning puppet config.vm.provision :puppet do |puppet| puppet.manifests_path = 'puppet/manifests' puppet.module_path = ['puppet/modules'] puppet.manifest_file = 'site.pp' end #Syncs local chard folder with folder in box config.vm.synced_folder "~/dev/chard", "/chard"
现在这是我获得的木偶图书管理员输出:
==> default: [Librarian] Ruby Version: 2.1.4 ==> default: [Librarian] Ruby Platform: x86_64-linux ==> default: [Librarian] Rubygems Version: 2.4.2 ==> default: [Librarian] Librarian Version: 0.1.2 ==> default: [Librarian] Librarian Adapter: puppet ==> default: [Librarian] Librarian Adapter Version: 2.0.0 ==> default: [Librarian] Project: /home/vagrant ==> default: [Librarian] Specfile: Puppetfile ==> default: [Librarian] Lockfile: Puppetfile.lock ==> default: [Librarian] Git: /usr/bin/git ==> default: [Librarian] Git Version: 1.7.9.5 ==> default: [Librarian] Git Environment Variables: ==> default: [Librarian] (empty) ==> default: [Librarian] Specfile not found, using defaults: /home/vagrant/Puppetfile ==> default: [Librarian] Pre-Cached Sources: ==> default: Metadata file does not exist: /home/vagrant/metadata.json ==> default: /usr/local/rvm/gems/ruby-2.1.4/gems/librarian-puppet-2.0.0/lib/librarian/puppet/dsl.rb:70:in `metadata' ==> default: /usr/local/rvm/gems/ruby-2.1.4/gems/librarian-puppet-2.0.0/lib/librarian/puppet/dsl.rb:24:in `block in run' ==> default: /usr/local/rvm/gems/ruby-2.1.4/gems/librarian-0.1.2/lib/librarian/dsl/receiver.rb:34:in `instance_eval' ==> default: /usr/local/rvm/gems/ruby-2.1.4/gems/librarian-0.1.2/lib/librarian/dsl/receiver.rb:34:in `run' ==> default: /usr/local/rvm/gems/ruby-2.1.4/gems/librarian-puppet-2.0.0/lib/librarian/puppet/dsl.rb:47:in `run' ==> default: /usr/local/rvm/gems/ruby-2.1.4/gems/librarian-puppet-2.0.0/lib/librarian/puppet/dsl.rb:34:in `block in run' ==> default: /usr/local/rvm/gems/ruby-2.1.4/gems/librarian-puppet-2.0.0/lib/librarian/puppet/dsl.rb:28:in `tap' ==> default: /usr/local/rvm/gems/ruby-2.1.4/gems/librarian-puppet-2.0.0/lib/librarian/puppet/dsl.rb:28:in `run' ==> default: /usr/local/rvm/gems/ruby-2.1.4/gems/librarian-0.1.2/lib/librarian/dsl.rb:17:in `run' ==> default: /usr/local/rvm/gems/ruby-2.1.4/gems/librarian-0.1.2/lib/librarian/environment.rb:148:in `dsl' ==> default: /usr/local/rvm/gems/ruby-2.1.4/gems/librarian-0.1.2/lib/librarian/specfile.rb:15:in `read' ==> default: /usr/local/rvm/gems/ruby-2.1.4/gems/librarian-0.1.2/lib/librarian/action/resolve.rb:13:in `run' ==> default: /usr/local/rvm/gems/ruby-2.1.4/gems/librarian-0.1.2/lib/librarian/cli.rb:169:in `resolve!' ==> default: /usr/local/rvm/gems/ruby-2.1.4/gems/librarian-puppet-2.0.0/lib/librarian/puppet/cli.rb:67:in `install' ==> default: /usr/local/rvm/gems/ruby-2.1.4/gems/thor-0.19.1/lib/thor/command.rb:27:in `run' ==> default: /usr/local/rvm/gems/ruby-2.1.4/gems/thor-0.19.1/lib/thor/invocation.rb:126:in `invoke_command' ==> default: /usr/local/rvm/gems/ruby-2.1.4/gems/thor-0.19.1/lib/thor.rb:359:in `dispatch' ==> default: /usr/local/rvm/gems/ruby-2.1.4/gems/thor-0.19.1/lib/thor/base.rb:440:in `start' ==> default: /usr/local/rvm/gems/ruby-2.1.4/gems/librarian-0.1.2/lib/librarian/cli.rb:26:in `block (2 levels) in bin!' ==> default: /usr/local/rvm/gems/ruby-2.1.4/gems/librarian-0.1.2/lib/librarian/cli.rb:31:in `returning_status' ==> default: /usr/local/rvm/gems/ruby-2.1.4/gems/librarian-0.1.2/lib/librarian/cli.rb:26:in `block in bin!' ==> default: /usr/local/rvm/gems/ruby-2.1.4/gems/librarian-0.1.2/lib/librarian/cli.rb:47:in `with_environment' ==> default: /usr/local/rvm/gems/ruby-2.1.4/gems/librarian-0.1.2/lib/librarian/cli.rb:26:in `bin!' ==> default: /usr/local/rvm/gems/ruby-2.1.4/gems/librarian-puppet-2.0.0/bin/librarian-puppet:7:in `<top (required)>' ==> default: /usr/local/rvm/gems/ruby-2.1.4/bin/librarian-puppet:23:in `load' ==> default: /usr/local/rvm/gems/ruby-2.1.4/bin/librarian-puppet:23:in `<main>' ==> default: /usr/local/rvm/gems/ruby-2.1.4/bin/ruby_executable_hooks:15:in `eval' ==> default: /usr/local/rvm/gems/ruby-2.1.4/bin/ruby_executable_hooks:15:in `<main>' The following SSH command responded with a non-zero exit status. Vagrant assumes that this means the command failed! chmod +x /tmp/vagrant-shell && /tmp/vagrant-shell Stdout from the command: [Librarian] Ruby Version: 2.1.4 [Librarian] Ruby Platform: x86_64-linux [Librarian] Rubygems Version: 2.4.2 [Librarian] Librarian Version: 0.1.2 [Librarian] Librarian Adapter: puppet [Librarian] Librarian Adapter Version: 2.0.0 [Librarian] Project: /home/vagrant [Librarian] Specfile: Puppetfile [Librarian] Lockfile: Puppetfile.lock [Librarian] Git: /usr/bin/git [Librarian] Git Version: 1.7.9.5 [Librarian] Git Environment Variables: [Librarian] (empty) [Librarian] Specfile not found, using defaults: /home/vagrant/Puppetfile [Librarian] Pre-Cached Sources: Metadata file does not exist: /home/vagrant/metadata.json /usr/local/rvm/gems/ruby-2.1.4/gems/librarian-puppet-2.0.0/lib/librarian/puppet/dsl.rb:70:in `metadata' /usr/local/rvm/gems/ruby-2.1.4/gems/librarian-puppet-2.0.0/lib/librarian/puppet/dsl.rb:24:in `block in run' /usr/local/rvm/gems/ruby-2.1.4/gems/librarian-0.1.2/lib/librarian/dsl/receiver.rb:34:in `instance_eval' /usr/local/rvm/gems/ruby-2.1.4/gems/librarian-0.1.2/lib/librarian/dsl/receiver.rb:34:in `run' /usr/local/rvm/gems/ruby-2.1.4/gems/librarian-puppet-2.0.0/lib/librarian/puppet/dsl.rb:47:in `run' /usr/local/rvm/gems/ruby-2.1.4/gems/librarian-puppet-2.0.0/lib/librarian/puppet/dsl.rb:34:in `block in run' /usr/local/rvm/gems/ruby-2.1.4/gems/librarian-puppet-2.0.0/lib/librarian/puppet/dsl.rb:28:in `tap' /usr/local/rvm/gems/ruby-2.1.4/gems/librarian-puppet-2.0.0/lib/librarian/puppet/dsl.rb:28:in `run' /usr/local/rvm/gems/ruby-2.1.4/gems/librarian-0.1.2/lib/librarian/dsl.rb:17:in `run' /usr/local/rvm/gems/ruby-2.1.4/gems/librarian-0.1.2/lib/librarian/environment.rb:148:in `dsl' /usr/local/rvm/gems/ruby-2.1.4/gems/librarian-0.1.2/lib/librarian/specfile.rb:15:in `read' /usr/local/rvm/gems/ruby-2.1.4/gems/librarian-0.1.2/lib/librarian/action/resolve.rb:13:in `run' /usr/local/rvm/gems/ruby-2.1.4/gems/librarian-0.1.2/lib/librarian/cli.rb:169:in `resolve!' /usr/local/rvm/gems/ruby-2.1.4/gems/librarian-puppet-2.0.0/lib/librarian/puppet/cli.rb:67:in `install' /usr/local/rvm/gems/ruby-2.1.4/gems/thor-0.19.1/lib/thor/command.rb:27:in `run' /usr/local/rvm/gems/ruby-2.1.4/gems/thor-0.19.1/lib/thor/invocation.rb:126:in `invoke_command' /usr/local/rvm/gems/ruby-2.1.4/gems/thor-0.19.1/lib/thor.rb:359:in `dispatch' /usr/local/rvm/gems/ruby-2.1.4/gems/thor-0.19.1/lib/thor/base.rb:440:in `start' /usr/local/rvm/gems/ruby-2.1.4/gems/librarian-0.1.2/lib/librarian/cli.rb:26:in `block (2 levels) in bin!' /usr/local/rvm/gems/ruby-2.1.4/gems/librarian-0.1.2/lib/librarian/cli.rb:31:in `returning_status' /usr/local/rvm/gems/ruby-2.1.4/gems/librarian-0.1.2/lib/librarian/cli.rb:26:in `block in bin!' /usr/local/rvm/gems/ruby-2.1.4/gems/librarian-0.1.2/lib/librarian/cli.rb:47:in `with_environment' /usr/local/rvm/gems/ruby-2.1.4/gems/librarian-0.1.2/lib/librarian/cli.rb:26:in `bin!' /usr/local/rvm/gems/ruby-2.1.4/gems/librarian-puppet-2.0.0/bin/librarian-puppet:7:in `<top (required)>' /usr/local/rvm/gems/ruby-2.1.4/bin/librarian-puppet:23:in `load' /usr/local/rvm/gems/ruby-2.1.4/bin/librarian-puppet:23:in `<main>' /usr/local/rvm/gems/ruby-2.1.4/bin/ruby_executable_hooks:15:in `eval' /usr/local/rvm/gems/ruby-2.1.4/bin/ruby_executable_hooks:15:in `<main>' Stderr from the command: stdin: is not a tty /tmp/vagrant-shell: line 2: cd: /home/vagrant/chard: No such file or directory
Good day everyone,
I am giving vagrant a shot and pairing it with puppet to see if I can get a dummy project started. I am using provisioning scripts to install the necessary components in the ubuntu box I am spinning up on vagrant up command; however when puppet is provision it just fails and I don't know why, since I just started playing with it. My directory structure is as follows:
Project |--puppet |--manifests |--site.pp |--modules(empty) |--Puppetfile |--provision scripts |--Vagrantfile
My provisioning scripts run the following commands
$as_vagrant = 'sudo -u vagrant -H bash -l -c' ${as_vagrant} apt-get update ${as_vagrant} gpg --keyserver hkp://keys.gnupg.net --recv-keys D39DC0E3 ${as_vagrant} apt-get install curl -y ${as_vagrant} curl -sSL https://get.rvm.io | bash -s $1 rvm install 2.1.4 rvm use 2.1.4 --default ${as_vagrant} apt-get install -y puppet ${as_vagrant} gem install librarian-puppet -v 2.0.0 sudo apt-get install git -y sudo touch /home/vagrant/metadata.json sudo echo '{}' >> /home/vagrant/metadata.json
(I just threw all the commands in one block instead of breaking them up into their seperate files in order to keep this short)
My Puppetfile looks like this:
#!/usr/bin/env ruby #^syntax detection forge "https://forgeapi.puppetlabs.com" # use dependencies defined in metadata.json #metadata # use dependencies defined in Modulefile # modulefile # Java module mod 'tylerwalts/jdk_oracle' # A module from the Puppet Forge mod 'puppetlabs-stdlib' # A module from git mod 'puppetlabs-ntp', :git => 'git://github.com/puppetlabs/puppetlabs-ntp.git' # A module from a git branch/tag mod 'puppetlabs-apt', :git => 'https://github.com/puppetlabs/puppetlabs-apt.git', :ref => '1.4.x' # A module from Github pre-packaged tarball # mod 'puppetlabs-apache', '0.6.0', :github_tarball => 'puppetlabs/puppetlabs-apache'
The part of my vagrantfile that does runs the provision scripts looks like this:
##### Puppet management section config.vm.provision :shell, :path => "install-rvm.sh", :args => "stable" config.vm.provision :shell, :path => "install-ruby.sh", :args => "2.1.4" config.vm.provision :shell, :path => "install-puppetstuff.sh" config.vm.provision :shell, :path => "install-defaults.sh" #Provisioning puppet config.vm.provision :puppet do |puppet| puppet.manifests_path = 'puppet/manifests' puppet.module_path = ['puppet/modules'] puppet.manifest_file = 'site.pp' end #Setting up librarian puppet for puppet modules config.vm.provision :shell, :path => "librarian-puppet-init.sh"
Finally the librarian-puppet-init.sh script looks like this:
#!/usr/bin/env bash librarian-puppet install
The site.pp file:
class { 'jdk_oracle': versrion => '7' }
Now, considering I didn't miss anything, that is my current 'set up' and when I do vagrant up everything runs well up until vagrant runs my librarian-puppet-init it script. When it executes it the whole thing crashes and it spits this out
==> default: Puppet::Parser::AST::Resource failed with error ArgumentError: Could not find declared class jdk_oracle at /tmp/vagrant-puppet-3/manifests/site.pp:3 on node chard The following SSH command responded with a non-zero exit status. Vagrant assumes that this means the command failed! puppet apply --modulepath '/tmp/vagrant-puppet-3/modules-0:/etc/puppet/modules' --manifestdir /tmp/vagrant-puppet-3/manifests --detailed-exitcodes /tmp/vagrant-puppet-3/manifests/site.pp Stdout from the command: warning: Could not retrieve fact fqdn Stderr from the command: stdin: is not a tty Puppet::Parser::AST::Resource failed with error ArgumentError: Could not find declared class jdk_oracle at /tmp/vagrant-puppet-3/manifests/site.pp:3 on node chard
However, if I do not include anything in my site.pp file and instead leave it empty, I get this output(everything else stays the same)
==> default: Running provisioner: shell... default: Running: /var/folders/jp/b91ydrmx1dx8kmvr0jvc78tw0000gn/T/vagrant-shell20141107-3334-likxg7.sh ==> default: stdin: is not a tty ==> default: /usr/local/rvm/gems/ruby-2.1.4/gems/librarian-puppet-2.0.0/lib/librarian/puppet/dsl.rb:74:in `metadata' ==> default: : ==> default: undefined method `each' for nil:NilClass ==> default: ( ==> default: NoMethodError ==> default: ) ==> default: from /usr/local/rvm/gems/ruby-2.1.4/gems/librarian-puppet-2.0.0/lib/librarian/puppet/dsl.rb:24:in `block in run' ==> default: from /usr/local/rvm/gems/ruby-2.1.4/gems/librarian-0.1.2/lib/librarian/dsl/receiver.rb:34:in `instance_eval' ==> default: from /usr/local/rvm/gems/ruby-2.1.4/gems/librarian-0.1.2/lib/librarian/dsl/receiver.rb:34:in `run' ==> default: from /usr/local/rvm/gems/ruby-2.1.4/gems/librarian-puppet-2.0.0/lib/librarian/puppet/dsl.rb:47:in `run' ==> default: from /usr/local/rvm/gems/ruby-2.1.4/gems/librarian-puppet-2.0.0/lib/librarian/puppet/dsl.rb:34:in `block in run' ==> default: from /usr/local/rvm/gems/ruby-2.1.4/gems/librarian-puppet-2.0.0/lib/librarian/puppet/dsl.rb:28:in `tap' ==> default: from /usr/local/rvm/gems/ruby-2.1.4/gems/librarian-puppet-2.0.0/lib/librarian/puppet/dsl.rb:28:in `run' ==> default: from /usr/local/rvm/gems/ruby-2.1.4/gems/librarian-0.1.2/lib/librarian/dsl.rb:17:in `run' ==> default: from /usr/local/rvm/gems/ruby-2.1.4/gems/librarian-0.1.2/lib/librarian/environment.rb:148:in `dsl' ==> default: from /usr/local/rvm/gems/ruby-2.1.4/gems/librarian-0.1.2/lib/librarian/specfile.rb:15:in `read' ==> default: from /usr/local/rvm/gems/ruby-2.1.4/gems/librarian-0.1.2/lib/librarian/action/resolve.rb:13:in `run' ==> default: from /usr/local/rvm/gems/ruby-2.1.4/gems/librarian-0.1.2/lib/librarian/cli.rb:169:in `resolve!' ==> default: from /usr/local/rvm/gems/ruby-2.1.4/gems/librarian-puppet-2.0.0/lib/librarian/puppet/cli.rb:67:in `install' ==> default: from /usr/local/rvm/gems/ruby-2.1.4/gems/thor-0.19.1/lib/thor/command.rb:27:in `run' ==> default: from /usr/local/rvm/gems/ruby-2.1.4/gems/thor-0.19.1/lib/thor/invocation.rb:126:in `invoke_command' ==> default: from /usr/local/rvm/gems/ruby-2.1.4/gems/thor-0.19.1/lib/thor.rb:359:in `dispatch' ==> default: from /usr/local/rvm/gems/ruby-2.1.4/gems/thor-0.19.1/lib/thor/base.rb:440:in `start' ==> default: from /usr/local/rvm/gems/ruby-2.1.4/gems/librarian-0.1.2/lib/librarian/cli.rb:26:in `block (2 levels) in bin!' ==> default: from /usr/local/rvm/gems/ruby-2.1.4/gems/librarian-0.1.2/lib/librarian/cli.rb:31:in `returning_status' ==> default: from /usr/local/rvm/gems/ruby-2.1.4/gems/librarian-0.1.2/lib/librarian/cli.rb:26:in `block in bin!' ==> default: from /usr/local/rvm/gems/ruby-2.1.4/gems/librarian-0.1.2/lib/librarian/cli.rb:47:in `with_environment' ==> default: from /usr/local/rvm/gems/ruby-2.1.4/gems/librarian-0.1.2/lib/librarian/cli.rb:26:in `bin!' ==> default: from /usr/local/rvm/gems/ruby-2.1.4/gems/librarian-puppet-2.0.0/bin/librarian-puppet:7:in `<top (required)>' ==> default: from /usr/local/rvm/gems/ruby-2.1.4/bin/librarian-puppet:23:in `load' ==> default: from /usr/local/rvm/gems/ruby-2.1.4/bin/librarian-puppet:23:in `<main>' ==> default: from /usr/local/rvm/gems/ruby-2.1.4/bin/ruby_executable_hooks:15:in `eval' ==> default: from /usr/local/rvm/gems/ruby-2.1.4/bin/ruby_executable_hooks:15:in `<main>' The following SSH command responded with a non-zero exit status. Vagrant assumes that this means the command failed! chmod +x /tmp/vagrant-shell && /tmp/vagrant-shell Stdout from the command: Stderr from the command: stdin: is not a tty /usr/local/rvm/gems/ruby-2.1.4/gems/librarian-puppet-2.0.0/lib/librarian/puppet/dsl.rb:74:in `metadata': undefined method `each' for nil:NilClass (NoMethodError) from /usr/local/rvm/gems/ruby-2.1.4/gems/librarian-puppet-2.0.0/lib/librarian/puppet/dsl.rb:24:in `block in run' from /usr/local/rvm/gems/ruby-2.1.4/gems/librarian-0.1.2/lib/librarian/dsl/receiver.rb:34:in `instance_eval' from /usr/local/rvm/gems/ruby-2.1.4/gems/librarian-0.1.2/lib/librarian/dsl/receiver.rb:34:in `run' from /usr/local/rvm/gems/ruby-2.1.4/gems/librarian-puppet-2.0.0/lib/librarian/puppet/dsl.rb:47:in `run' from /usr/local/rvm/gems/ruby-2.1.4/gems/librarian-puppet-2.0.0/lib/librarian/puppet/dsl.rb:34:in `block in run' from /usr/local/rvm/gems/ruby-2.1.4/gems/librarian-puppet-2.0.0/lib/librarian/puppet/dsl.rb:28:in `tap' from /usr/local/rvm/gems/ruby-2.1.4/gems/librarian-puppet-2.0.0/lib/librarian/puppet/dsl.rb:28:in `run' from /usr/local/rvm/gems/ruby-2.1.4/gems/librarian-0.1.2/lib/librarian/dsl.rb:17:in `run' from /usr/local/rvm/gems/ruby-2.1.4/gems/librarian-0.1.2/lib/librarian/environment.rb:148:in `dsl' from /usr/local/rvm/gems/ruby-2.1.4/gems/librarian-0.1.2/lib/librarian/specfile.rb:15:in `read' from /usr/local/rvm/gems/ruby-2.1.4/gems/librarian-0.1.2/lib/librarian/action/resolve.rb:13:in `run' from /usr/local/rvm/gems/ruby-2.1.4/gems/librarian-0.1.2/lib/librarian/cli.rb:169:in `resolve!' from /usr/local/rvm/gems/ruby-2.1.4/gems/librarian-puppet-2.0.0/lib/librarian/puppet/cli.rb:67:in `install' from /usr/local/rvm/gems/ruby-2.1.4/gems/thor-0.19.1/lib/thor/command.rb:27:in `run' from /usr/local/rvm/gems/ruby-2.1.4/gems/thor-0.19.1/lib/thor/invocation.rb:126:in `invoke_command' from /usr/local/rvm/gems/ruby-2.1.4/gems/thor-0.19.1/lib/thor.rb:359:in `dispatch' from /usr/local/rvm/gems/ruby-2.1.4/gems/thor-0.19.1/lib/thor/base.rb:440:in `start' from /usr/local/rvm/gems/ruby-2.1.4/gems/librarian-0.1.2/lib/librarian/cli.rb:26:in `block (2 levels) in bin!' from /usr/local/rvm/gems/ruby-2.1.4/gems/librarian-0.1.2/lib/librarian/cli.rb:31:in `returning_status' from /usr/local/rvm/gems/ruby-2.1.4/gems/librarian-0.1.2/lib/librarian/cli.rb:26:in `block in bin!' from /usr/local/rvm/gems/ruby-2.1.4/gems/librarian-0.1.2/lib/librarian/cli.rb:47:in `with_environment' from /usr/local/rvm/gems/ruby-2.1.4/gems/librarian-0.1.2/lib/librarian/cli.rb:26:in `bin!' from /usr/local/rvm/gems/ruby-2.1.4/gems/librarian-puppet-2.0.0/bin/librarian-puppet:7:in `<top (required)>' from /usr/local/rvm/gems/ruby-2.1.4/bin/librarian-puppet:23:in `load' from /usr/local/rvm/gems/ruby-2.1.4/bin/librarian-puppet:23:in `<main>' from /usr/local/rvm/gems/ruby-2.1.4/bin/ruby_executable_hooks:15:in `eval' from /usr/local/rvm/gems/ruby-2.1.4/bin/ruby_executable_hooks:15:in `<main>'
Anyone got any clue as to what is going on? I have spent days trying to figure out whats wrong and countless hours trying to find something on google that explains things clearly enough so that I have a squeaky clean set up, with no success. Any and all help is welcome. Thanks everybody.
*****EDIT******
I've moved my provision command for librarian puppet before the commands for provisioning puppet so my vagrant file looks like this now, and I've added a sync command:
##### Puppet management section config.vm.provision :shell, :path => "install-rvm.sh", :args => "stable" config.vm.provision :shell, :path => "install-ruby.sh", :args => "2.1.4" config.vm.provision :shell, :path => "install-puppetstuff.sh" config.vm.provision :shell, :path => "install-defaults.sh" #Seting up librrian puppet for puppet modules config.vm.provision :shell, :path => "librarian-puppet-init.sh" #Provisioning puppet config.vm.provision :puppet do |puppet| puppet.manifests_path = 'puppet/manifests' puppet.module_path = ['puppet/modules'] puppet.manifest_file = 'site.pp' end #Syncs local chard folder with folder in box config.vm.synced_folder "~/dev/chard", "/chard"
Now this is the puppet librarian output I get:
==> default: [Librarian] Ruby Version: 2.1.4 ==> default: [Librarian] Ruby Platform: x86_64-linux ==> default: [Librarian] Rubygems Version: 2.4.2 ==> default: [Librarian] Librarian Version: 0.1.2 ==> default: [Librarian] Librarian Adapter: puppet ==> default: [Librarian] Librarian Adapter Version: 2.0.0 ==> default: [Librarian] Project: /home/vagrant ==> default: [Librarian] Specfile: Puppetfile ==> default: [Librarian] Lockfile: Puppetfile.lock ==> default: [Librarian] Git: /usr/bin/git ==> default: [Librarian] Git Version: 1.7.9.5 ==> default: [Librarian] Git Environment Variables: ==> default: [Librarian] (empty) ==> default: [Librarian] Specfile not found, using defaults: /home/vagrant/Puppetfile ==> default: [Librarian] Pre-Cached Sources: ==> default: Metadata file does not exist: /home/vagrant/metadata.json ==> default: /usr/local/rvm/gems/ruby-2.1.4/gems/librarian-puppet-2.0.0/lib/librarian/puppet/dsl.rb:70:in `metadata' ==> default: /usr/local/rvm/gems/ruby-2.1.4/gems/librarian-puppet-2.0.0/lib/librarian/puppet/dsl.rb:24:in `block in run' ==> default: /usr/local/rvm/gems/ruby-2.1.4/gems/librarian-0.1.2/lib/librarian/dsl/receiver.rb:34:in `instance_eval' ==> default: /usr/local/rvm/gems/ruby-2.1.4/gems/librarian-0.1.2/lib/librarian/dsl/receiver.rb:34:in `run' ==> default: /usr/local/rvm/gems/ruby-2.1.4/gems/librarian-puppet-2.0.0/lib/librarian/puppet/dsl.rb:47:in `run' ==> default: /usr/local/rvm/gems/ruby-2.1.4/gems/librarian-puppet-2.0.0/lib/librarian/puppet/dsl.rb:34:in `block in run' ==> default: /usr/local/rvm/gems/ruby-2.1.4/gems/librarian-puppet-2.0.0/lib/librarian/puppet/dsl.rb:28:in `tap' ==> default: /usr/local/rvm/gems/ruby-2.1.4/gems/librarian-puppet-2.0.0/lib/librarian/puppet/dsl.rb:28:in `run' ==> default: /usr/local/rvm/gems/ruby-2.1.4/gems/librarian-0.1.2/lib/librarian/dsl.rb:17:in `run' ==> default: /usr/local/rvm/gems/ruby-2.1.4/gems/librarian-0.1.2/lib/librarian/environment.rb:148:in `dsl' ==> default: /usr/local/rvm/gems/ruby-2.1.4/gems/librarian-0.1.2/lib/librarian/specfile.rb:15:in `read' ==> default: /usr/local/rvm/gems/ruby-2.1.4/gems/librarian-0.1.2/lib/librarian/action/resolve.rb:13:in `run' ==> default: /usr/local/rvm/gems/ruby-2.1.4/gems/librarian-0.1.2/lib/librarian/cli.rb:169:in `resolve!' ==> default: /usr/local/rvm/gems/ruby-2.1.4/gems/librarian-puppet-2.0.0/lib/librarian/puppet/cli.rb:67:in `install' ==> default: /usr/local/rvm/gems/ruby-2.1.4/gems/thor-0.19.1/lib/thor/command.rb:27:in `run' ==> default: /usr/local/rvm/gems/ruby-2.1.4/gems/thor-0.19.1/lib/thor/invocation.rb:126:in `invoke_command' ==> default: /usr/local/rvm/gems/ruby-2.1.4/gems/thor-0.19.1/lib/thor.rb:359:in `dispatch' ==> default: /usr/local/rvm/gems/ruby-2.1.4/gems/thor-0.19.1/lib/thor/base.rb:440:in `start' ==> default: /usr/local/rvm/gems/ruby-2.1.4/gems/librarian-0.1.2/lib/librarian/cli.rb:26:in `block (2 levels) in bin!' ==> default: /usr/local/rvm/gems/ruby-2.1.4/gems/librarian-0.1.2/lib/librarian/cli.rb:31:in `returning_status' ==> default: /usr/local/rvm/gems/ruby-2.1.4/gems/librarian-0.1.2/lib/librarian/cli.rb:26:in `block in bin!' ==> default: /usr/local/rvm/gems/ruby-2.1.4/gems/librarian-0.1.2/lib/librarian/cli.rb:47:in `with_environment' ==> default: /usr/local/rvm/gems/ruby-2.1.4/gems/librarian-0.1.2/lib/librarian/cli.rb:26:in `bin!' ==> default: /usr/local/rvm/gems/ruby-2.1.4/gems/librarian-puppet-2.0.0/bin/librarian-puppet:7:in `<top (required)>' ==> default: /usr/local/rvm/gems/ruby-2.1.4/bin/librarian-puppet:23:in `load' ==> default: /usr/local/rvm/gems/ruby-2.1.4/bin/librarian-puppet:23:in `<main>' ==> default: /usr/local/rvm/gems/ruby-2.1.4/bin/ruby_executable_hooks:15:in `eval' ==> default: /usr/local/rvm/gems/ruby-2.1.4/bin/ruby_executable_hooks:15:in `<main>' The following SSH command responded with a non-zero exit status. Vagrant assumes that this means the command failed! chmod +x /tmp/vagrant-shell && /tmp/vagrant-shell Stdout from the command: [Librarian] Ruby Version: 2.1.4 [Librarian] Ruby Platform: x86_64-linux [Librarian] Rubygems Version: 2.4.2 [Librarian] Librarian Version: 0.1.2 [Librarian] Librarian Adapter: puppet [Librarian] Librarian Adapter Version: 2.0.0 [Librarian] Project: /home/vagrant [Librarian] Specfile: Puppetfile [Librarian] Lockfile: Puppetfile.lock [Librarian] Git: /usr/bin/git [Librarian] Git Version: 1.7.9.5 [Librarian] Git Environment Variables: [Librarian] (empty) [Librarian] Specfile not found, using defaults: /home/vagrant/Puppetfile [Librarian] Pre-Cached Sources: Metadata file does not exist: /home/vagrant/metadata.json /usr/local/rvm/gems/ruby-2.1.4/gems/librarian-puppet-2.0.0/lib/librarian/puppet/dsl.rb:70:in `metadata' /usr/local/rvm/gems/ruby-2.1.4/gems/librarian-puppet-2.0.0/lib/librarian/puppet/dsl.rb:24:in `block in run' /usr/local/rvm/gems/ruby-2.1.4/gems/librarian-0.1.2/lib/librarian/dsl/receiver.rb:34:in `instance_eval' /usr/local/rvm/gems/ruby-2.1.4/gems/librarian-0.1.2/lib/librarian/dsl/receiver.rb:34:in `run' /usr/local/rvm/gems/ruby-2.1.4/gems/librarian-puppet-2.0.0/lib/librarian/puppet/dsl.rb:47:in `run' /usr/local/rvm/gems/ruby-2.1.4/gems/librarian-puppet-2.0.0/lib/librarian/puppet/dsl.rb:34:in `block in run' /usr/local/rvm/gems/ruby-2.1.4/gems/librarian-puppet-2.0.0/lib/librarian/puppet/dsl.rb:28:in `tap' /usr/local/rvm/gems/ruby-2.1.4/gems/librarian-puppet-2.0.0/lib/librarian/puppet/dsl.rb:28:in `run' /usr/local/rvm/gems/ruby-2.1.4/gems/librarian-0.1.2/lib/librarian/dsl.rb:17:in `run' /usr/local/rvm/gems/ruby-2.1.4/gems/librarian-0.1.2/lib/librarian/environment.rb:148:in `dsl' /usr/local/rvm/gems/ruby-2.1.4/gems/librarian-0.1.2/lib/librarian/specfile.rb:15:in `read' /usr/local/rvm/gems/ruby-2.1.4/gems/librarian-0.1.2/lib/librarian/action/resolve.rb:13:in `run' /usr/local/rvm/gems/ruby-2.1.4/gems/librarian-0.1.2/lib/librarian/cli.rb:169:in `resolve!' /usr/local/rvm/gems/ruby-2.1.4/gems/librarian-puppet-2.0.0/lib/librarian/puppet/cli.rb:67:in `install' /usr/local/rvm/gems/ruby-2.1.4/gems/thor-0.19.1/lib/thor/command.rb:27:in `run' /usr/local/rvm/gems/ruby-2.1.4/gems/thor-0.19.1/lib/thor/invocation.rb:126:in `invoke_command' /usr/local/rvm/gems/ruby-2.1.4/gems/thor-0.19.1/lib/thor.rb:359:in `dispatch' /usr/local/rvm/gems/ruby-2.1.4/gems/thor-0.19.1/lib/thor/base.rb:440:in `start' /usr/local/rvm/gems/ruby-2.1.4/gems/librarian-0.1.2/lib/librarian/cli.rb:26:in `block (2 levels) in bin!' /usr/local/rvm/gems/ruby-2.1.4/gems/librarian-0.1.2/lib/librarian/cli.rb:31:in `returning_status' /usr/local/rvm/gems/ruby-2.1.4/gems/librarian-0.1.2/lib/librarian/cli.rb:26:in `block in bin!' /usr/local/rvm/gems/ruby-2.1.4/gems/librarian-0.1.2/lib/librarian/cli.rb:47:in `with_environment' /usr/local/rvm/gems/ruby-2.1.4/gems/librarian-0.1.2/lib/librarian/cli.rb:26:in `bin!' /usr/local/rvm/gems/ruby-2.1.4/gems/librarian-puppet-2.0.0/bin/librarian-puppet:7:in `<top (required)>' /usr/local/rvm/gems/ruby-2.1.4/bin/librarian-puppet:23:in `load' /usr/local/rvm/gems/ruby-2.1.4/bin/librarian-puppet:23:in `<main>' /usr/local/rvm/gems/ruby-2.1.4/bin/ruby_executable_hooks:15:in `eval' /usr/local/rvm/gems/ruby-2.1.4/bin/ruby_executable_hooks:15:in `<main>' Stderr from the command: stdin: is not a tty /tmp/vagrant-shell: line 2: cd: /home/vagrant/chard: No such file or directory
原文:https://stackoverflow.com/questions/26809553
最满意答案
创建画布时,需要手动设置宽度。 默认画布大小为300x150。 从这里HTMLCanvasElement 。 像这样的东西:
var canvas = document.createElement('canvas'); var context = canvas.getContext('2d'); canvas.width = image.width; canvas.height = image.height; context.drawImage(image, 0, 0);
When you create canvases, you need to set their width manually. Default canvas size is 300x150. From here HTMLCanvasElement. Something like this:
var canvas = document.createElement('canvas'); var context = canvas.getContext('2d'); canvas.width = image.width; canvas.height = image.height; context.drawImage(image, 0, 0);
相关问答
更多-
只是一个小的更新什么是最好的方法是做到这一点。 我实际上编写了关于高性能ECMAScript和HTML5 Canvas的学士论文(pdf,德文),所以我现在就这个主题收集了一些专业知识。 最好的解决方案是使用多个画布元素。 从一个画布绘制到另一个画布上就像在画布上绘制任意图像一样快。 因此,“存储”画布的状态与使用两个画布元素时再次恢复它的速度一样快。 这个jsPerf测试用例非常清楚地显示了各种方法及其优点和缺点。 为了完整起见,在这里你应该怎么做: // setup var buffer = docum ...
-
Canvas getImageData和putImageData部分加载图像(Canvas getImageData and putImageData load image partially)[2022-10-03]
创建画布时,需要手动设置宽度。 默认画布大小为300x150。 从这里HTMLCanvasElement 。 像这样的东西: var canvas = document.createElement('canvas'); var context = canvas.getContext('2d'); canvas.width = image.width; canvas.height = image.height; context.drawImage(image, 0, 0); When you create ... -
由于您可能希望游戏控制台仍然显示,您可以使用缩小的alpha(globalAlpha)绘制100x100的盒子。 这是示例代码和演示: var canvas=document.getElementById("canvas"); var ctx=canvas.getContext("2d"); var cw=canvas.width; var ch=canvas.height; var boxWidth=100; var boxHeight=100; var boxRows=Math.ceil ...
-
狩猎黑色像素 @ Loktar的特别回答是针对特定图像,仅由黑色和透明像素组成。 在imageData中,这两种类型的像素非常相似,因为只有它们的alpha值不同。 所以他的代码只对alpha值进行了绘制检查(每个循环中的第四个)。 cData[pData] = imagePixData[iData]; cData[pData + 1] = imagePixData[iData + 1]; cData[pData + 2] = imagePixData[iData + 2]; // only checkin ...
-
在修改像素时找到解决方案是必要的。 您可以使用ImageBitmap 。 return createImageBitmap(imageData).then(function(bitmap){ var canvas = document.createElement('canvas'); canvas.width = bitmap.width; canvas.height = bitmap.height; canvas.getContext('2d').drawImage(bit ...
-
请试试这个。 这很有效。 但是,由于域名不同,存在跨域违规。 您可能需要通过服务器代理此操作。 请参阅此解决方案。 function _log(string){ document.getElementById("log").innerHTML += string; } function _createCanvas(){ var canvas = document.createElement("canvas"); canvas.setAttribute("id", "canva ...
-
Javascript:为getImageData加载图像到画布的正确方法?(Javascript: Correct way to load image to canvas for getImageData?)[2023-04-06]
你应该放 var image_data = hctx.getImageData(0,0,1000,1000); var rgba_byte_array = image_data.data; // image_data.data.length = 4000000 var loop = setInterval(loop,1000/30); 里面的imageObj.onload函数 You should put var image_data = hctx.getImageData(0,0,1000,1000); ... -
根据规格 , 当前路径,变换矩阵,阴影属性,全局alpha, 剪切区域和全局组合运算符不得影响getImageData()和putImageData()方法。 在您的情况下,为什么使用额外的画布和像素数据操作? 为什么不呢 ctx.save(); ctx.beginPath(); ctx.arc(x, y, r, 0, Math.PI*2, true); ctx.closePath(); ctx.clip(); ctx.translate(x, y); ctx.drawImage(img, -r, ...
-
画布imagedata数组不是每个像素[r,g,b]有3个条目,而是4 [r,g,b,a],所以如果%3应该设置alpha值,那么它应该是%4 。 此时,第一个条目(0)的异常,然后它将第4个条目(i = 3)设置为255(正确),但接下来它将第7个条目(i = 6)设置为255,这意味着相反比[r,g,b,a,r,g,b,a]你有[r,g,b,a,r,g,a,b],它随着时间的推移会变得更糟。 尝试 function updateCanvas(frame_data, width, height) { ...
-
使用重复的setTimeout(): var shouldStop = false; function iteration() { canvas.putImageData(imgData, 0, 0); modify(imgData); if (!shouldStop) { window.setTimeout(iteration, 1000); } } function stop() { shouldStop = true; } 这将每秒显示和修改图像数据。 另一种解决方 ...